博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一 Mybatis概述&与Hibernate的区别&CRUD
阅读量:5348 次
发布时间:2019-06-15

本文共 6799 字,大约阅读时间需要 22 分钟。

 

Mybatis是类似Hibernate的ORM持久层框架

 

为什么学习Mybatis?

  1.  是目前国内主流的持久层框架,面向sql(相较于Hibernate,Mybatis一定要用sql)
  2.  Hibernate学习门槛不低,要精通门槛更高(在于如何设计O/R映射,性能和对象模型之间取得平衡,怎样用好Hibernate缓存与数据加载策略)
  3.  sql优化方面,Hibernate的查询会将表中的所有字段查询出来,会有性能消耗。如果自己写sql语句进行查询,则破坏了Hibernate开发的简洁性。如果有个查询要关联多张表,比如5张表,10张表,而我们只取其中几张表的部分字段,这时用Hibernate就会显得非常力不从心,后续维护也令人发狂。

 

JDBC存在的问题

1 频繁的创建和打开,关闭数据库,太消耗资源

2 sql语句存在硬编码,不利于维护

3 sql参数设置硬编码,不利于维护

4 结果集获取与遍历复杂,存在硬编码,不利于维护,期望能够查询后返回一个java对象

 

Mybatis介绍:

Mybatis本是Apache的一个开源项目iBatis.是面向sql的持久层框架,对jdbc进行了封装。

开发中,可以只专注于sql语句本身的拼装,其他复杂过程交给MyBatis完成

 

 

MyBatis入门:

  • 根据用户ID查询用户信息
  • 根据用户名查找用户列表
  • 添加用户
  • 修改用户
  • 删除用户

 

工程搭建:

  1. 导入依赖jar包
  2. 配置SqlMapConfig.xml
  3. 配置log4j.properties
  4. pojo
  5. 配置sql查询映射文件
  6. 加载映射文件

包结构:config为Source文件,与src相同

 

导入依赖jar包

 

配置SqlMapConfig.xml映射文件,映射加载:项目名/文件名 , 默认在config文件下,mybatis包下加载

 

 

配置log4j.properties,输出到控制台

 

 

pojo:与Hibernate的domain相同,提供属性的getset方法

 

配置sql查询映射文件  user.xml , namesapce:命名空间, select  id   等  见下图

 

 

 

 

 

 

根据用户ID查询用户信息:

  1. 编写sql语句
  2. 配置关系映射
  3. 单元测试

 

 

根据用户名查找用户列表

  1. 编写sql语句
  2. 配置关系映射
  3. 单元测试

方式一:手动在sql语句里面设置查询,#{name}

方式二:直接在user.xml中设置,${}是字符串拼接指令,如果入参为普通数据类型,括号内只能写value

一:

映射:

单元测试:

 二:${}是字符串拼接指令,如果入参为普通数据类型,括号内只能写value

 单元测试:

 

 

 

添加用户

映射:

单元测试:如果不想手动提交事务,设置openSession(true)

 

添加用户返回主键:

方式一:

 

方式二:方式1的简写,使用自增,底层调用函数

 

 

添加并返回uuid:方式二覆盖方式一,不返回id,返回uuid2。后设置覆盖前设置

 

修改和删除操作:

配置:

 

测试:

 

 

/MyBatis/config/SqlMapConfig.xml

 

/MyBatis/config/mybatis/user.xml

SELECT UUID();
INSERT INTO `user` ( `username`, `birthday`, `sex`, `address` `uuid2` ) VALUES ( #{username}, #{birthday}, #{sex}, #{address} #{uuid2} );
SELECT UUID();
INSERT INTO `user` ( `username`, `birthday`, `sex`, `address`, `uuid2`) VALUES (#{username}, #{birthday}, #{sex}, #{address}, #{uuid2});
UPDATE `user` SET `username` = #{username} WHERE `id` = #{id};
delete from `user` where `id` = #{id}

 

/MyBatis/src/com/mybatis/test/MybatisTest.java

package com.mybatis.test;import java.io.IOException;import java.io.InputStream;import java.util.Date;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;import com.mybatis.pojo.User;import com.mybatis.utils.SqlSessionFactoryUtils;public class MybatisTest {      @Test    //根据id查询对象    public void testGetUserById() throws IOException{                //创建SqlSessionFactoryBuilder对象        SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();        //创建核心配置文件输入流,Mybatis自带Resources方法加载配置        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");        //通过输入流创建sqlSessionFactory对象        SqlSessionFactory sqlSessionFactory = ssfb.build(inputStream);        //创建sqlSession对象        SqlSession sqlSession = sqlSessionFactory.openSession();        //执行查询,参数1:sql id , 参数2:入参        User user = sqlSession.selectOne("user.getUserById", 1);        //打印结果        System.out.println(user);        //释放资源        sqlSession.close();            }    @Test    //根据username查询对象    public void testgetUserByUserName() throws IOException{                //创建SqlSessionFactory对象,加载配置        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();        //创建sqlSession对象,打开会话        SqlSession sqlSession = sqlSessionFactory.openSession();        //执行查询,参数1:sql id , 参数2:入参//        List
list = sqlSession.selectList("user.getUserByUserName", "%张%"); //方式二 List
list = sqlSession.selectList("user.getUserByUserName", "%张%"); //打印结果 for (User user : list) { System.out.println(user); } //释放资源 sqlSession.close(); } @Test //插入测试,返回主键 public void testinsertUser() throws IOException{ //创建sqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory(); //打开会话 SqlSession sqlSession = sqlSessionFactory.openSession(); User user = new User(); user.setUsername("插入测试"); user.setSex("1"); user.setBirthday(new Date()); user.setAddress("河南郑州"); //执行插入 sqlSession.insert("user.insertUser",user); System.out.println(user); //提交事务 sqlSession.commit(); //释放资源 sqlSession.close(); } @Test //插入测试,返回uuid public void testinsertUserUuid() throws IOException{ //创建sqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory(); //打开会话 SqlSession sqlSession = sqlSessionFactory.openSession(); User user = new User(); user.setUsername("插入测试"); user.setSex("1"); user.setBirthday(new Date()); user.setAddress("河南郑州"); //执行插入 sqlSession.insert("user.insertUserUuid",user); System.out.println(user); //提交事务 sqlSession.commit(); //释放资源 sqlSession.close(); } @Test //修改用户 public void testupdateUser(){ SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory(); SqlSession sqlSession = sqlSessionFactory.openSession(); User user = new User(); user.setId(32); user.setUsername("修改测试"); sqlSession.update("user.updateUser", user); System.out.println(user); sqlSession.commit(); sqlSession.close(); } @Test //删除用户 public void testdeleteUser(){ SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory(); SqlSession sqlSession = sqlSessionFactory.openSession(); sqlSession.delete("user.deleteUser", 28); sqlSession.commit(); sqlSession.close(); } }

 

转载于:https://www.cnblogs.com/ltfxy/p/10398634.html

你可能感兴趣的文章
描绘应用程序级的信息
查看>>
poj2406-Power Strings
查看>>
2018/12/18 JS会像Linux一样改变编程
查看>>
php环境搭建脚本
查看>>
FTP主动模式与被动模式说明
查看>>
php 编译常见错误
查看>>
MES架构
查看>>
【Python3 爬虫】15_Fiddler抓包分析
查看>>
高性能JavaScript-JS脚本加载与执行对性能的影响
查看>>
关于标签之间因为换行等问题造成的空白间距问题处理
查看>>
hdu 2767(tarjan)
查看>>
sklearn之分类模型混淆矩阵和分类报告
查看>>
MySQL各存储引擎
查看>>
项目--简单导出CSV文件
查看>>
Oracle session相关数据字典(一)
查看>>
织梦文章内容提取第一张或者多张图片输出
查看>>
C#用正则表达式 获取网页源代码标签的属性或值
查看>>
BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(贪心)
查看>>
WCF(一) 简单的认知
查看>>
[MFC][DShow]简单例子
查看>>