01_MyBatis_碎碎念

166 阅读2分钟

1 MyBatis操作过程

  1. 根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象 有数据源一些运行环境信息
  2. sql映射文件;配置了每一个sql,以及sql的封装规则等。
  3. 将sql映射文件注册在全局配置文件中
  4. 写代码:
    • 根据全局配置文件得到SqlSessionFactory;
    • 使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查。一个sqlSession就是代表和数据库的一次会话,用完关闭
    • 使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。

2 MyBatis操作过程-改进

  1. 接口式编程
    • 原生: Dao ====> DaoImpl
    • mybatis: Mapper ====> xxMapper.xml
  2. SqlSession代表和数据库的一次会话;用完必须关闭;
  3. SqlSession和connection一样,都是非线程安全。每次使用都应该去获取新的对象。
  4. mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。
    • (将接口和xml进行绑定)
    • EmployeeMapper empMapper = sqlSession.getMapper(EmployeeMapper.class);
  5. 两个重要的配置文件:
    • mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等系统运行环境信息
    • sql映射文件:保存了每一个sql语句的映射信息:将sql抽取出来。

3 动态 SQL

  • – if
  • – choose (when, otherwise)
  • – trim (where, set)
  • – foreach

where 1=1 image.png

会多出来and ----- so 用<where标签

image.png

and放后边也会报错 ----- so 用<trim标签

image.png

image.png

image.png

4 MyBatis-缓存机制

4.1 一级缓存

  • 一级缓存(local cache), 即本地缓存, 作用域默认为sqlSession。当 Session flush 或 close 后, 该Session 中的所有 Cache 将被清空。
  • 本地缓存不能被关闭, 但可以调用 clearCache()来清空本地缓存, 或者改变缓存的作用域.
  • 在mybatis3.1之后, 可以配置本地缓存的作用域.在 mybatis.xml 中配置

image.png

一级缓存失效的四种情况

  1. 不同的SqlSession对应不同的一级缓存
  2. 同一个SqlSession但是查询条件不同
  3. 同一个SqlSession两次查询期间执行了任何一次增删改操作
  4. 同一个SqlSession两次查询期间手动清空了缓存

4.2 二级缓存

  • 二级缓存(second level cache),全局作用域缓存

  • 二级缓存默认不开启,需要手动配置

  • MyBatis提供二级缓存的接口以及实现,缓存实现要求POJO实现Serializable接口

  • 二级缓存在 SqlSession 关闭或提交之后才会生效

使用步骤

1.全局配置文件中开启二级缓存

  • <setting name="cacheEnabled" value="true"/
  1. 需要使用二级缓存的映射文件处使用cache配置缓存
    • <cache /
  2. 注意:POJO需要实现Serializable接口