- 对JDBC的增强/封装
- 有了Mybatis,开发人员just need 写SQL语句即可,不用关注数据库连接、资源关闭...
小技巧:
- PageHelper插件可以实现 分页处理
【动态SQL】 标签在mapper文件中
- <where> <if>可以实现 条件判断为真时,执行某一种SQL; 为假时,执行另一种
- <for-each> 可以实现同时获取多个值的记录 where id in (1,2,3)
1.实现步骤
- pom.xml是添加 依赖、
- mybatis.xml主配置文件 必须在resources标识的文件夹下面,才会被认为是resource
- mybatis默认不自动提交事务,在操作后sqlSession.commit()手动提交事务,数据库的数据才会发生变化。 这是在test.java中添加。
或者在创建sqlSession时,openSession()传入参数true.√
- sqlSession是线程不安全的,使用前先open,使用完毕后及时close
2.传统Mybatis执行:
1.创建项目。在pom.xml中添加依赖、jar包
2.main/java/包/domain中编写实体类,与DB中class对应
3.main/java/包/dao中编写接口,接口中的方法是对数据库的操作(无方法体)
4.main/java/包/dao中写 【分配置文件】,1个类对应1个接口、1个配置文件。 配置文件中进行mapper映射,规定nameplace(接口的全限定名称)、id(接口的方法)、resultType(返回类型,类Student的全限定名称)
5.main下加一个resources包,包中写 【主配置文件mybatis.xml】,数据库的连接信息(可以写多个数据库,确定连接哪个)、要执行sql语句的位置(【分配置文件】的全限定名称,有多少写多少)、 日志配置(可以在控制台输出执行的 sql 语句和参数)
6.main/java/包/utils中写 工具类, 用来sqlSession的获取(防止每个test需要写一大段)
7.main/java/包/dao/impl中写接口的实现类。 对接口中的方法实现,保留传入的参数(class对象/数据)
8.test/java/包/中写test文件, 创建 【7中的实现类】,创建Student对象并给数据,调用实现类的方法,实现对数据库的CRUD。
3.动态代理方式
- 上述【7、8】需要修改,【1-6】不变
- 不需要接口的【7】实现类
- namespace, id名称必须是 全限定名称
- sqlSession.getMapper(接口.class)会自动创建一个接口的实现类,并创建对象
4.返回类型
returnType返回类型
- mapper文件中 sql语句执行结果 的返回类型 可以是任意类型,只要该类型与结果匹配即可、
- 若返回Student,也可以有另一个与Student属性相同的类,将返回类型定义为这个类
- 返回类型也可以是Map, 但是Map只能返回一个结果,多行会显示错误。(不推荐用)
ResultMap
- 可以指定 数据库中colomn与 类中的属性 的对应关系
- 当列名和属性名不一致时,使用ResultMap(推荐使用),或者列别名
- returnType 和ResultMap不要同时使用
别名
- 可以定义别名 为全限定名称的类定义别名 在mybatis.xml主配置文件中定义
- 两种方式定义别名
- 不建议定义别名, 全限定名称更安全
Like的两种方式
a.传参:%李% b.传参:李