1 MyBatis操作过程
- 根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象 有数据源一些运行环境信息
- sql映射文件;配置了每一个sql,以及sql的封装规则等。
- 将sql映射文件注册在全局配置文件中
- 写代码:
- 根据全局配置文件得到SqlSessionFactory;
- 使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查。一个sqlSession就是代表和数据库的一次会话,用完关闭
- 使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。
2 MyBatis操作过程-改进
- 接口式编程
- 原生: Dao ====> DaoImpl
- mybatis: Mapper ====> xxMapper.xml
- SqlSession代表和数据库的一次会话;用完必须关闭;
- SqlSession和connection一样,都是非线程安全。每次使用都应该去获取新的对象。
- mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。
- (将接口和xml进行绑定)
- EmployeeMapper empMapper = sqlSession.getMapper(EmployeeMapper.class);
- 两个重要的配置文件:
- mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等系统运行环境信息
- sql映射文件:保存了每一个sql语句的映射信息:将sql抽取出来。
3 动态 SQL
- – if
- – choose (when, otherwise)
- – trim (where, set)
- – foreach
where 1=1
会多出来and ----- so 用<where标签
and放后边也会报错 ----- so 用<trim标签
4 MyBatis-缓存机制
4.1 一级缓存
- 一级缓存(local cache), 即本地缓存, 作用域默认为sqlSession。当 Session flush 或 close 后, 该Session 中的所有 Cache 将被清空。
- 本地缓存不能被关闭, 但可以调用 clearCache()来清空本地缓存, 或者改变缓存的作用域.
- 在mybatis3.1之后, 可以配置本地缓存的作用域.在 mybatis.xml 中配置
一级缓存失效的四种情况
- 不同的SqlSession对应不同的一级缓存
- 同一个SqlSession但是查询条件不同
- 同一个SqlSession两次查询期间执行了任何一次增删改操作
- 同一个SqlSession两次查询期间手动清空了缓存
4.2 二级缓存
-
二级缓存(second level cache),全局作用域缓存
-
二级缓存默认不开启,需要手动配置
-
MyBatis提供二级缓存的接口以及实现,缓存实现要求POJO实现Serializable接口
-
二级缓存在 SqlSession 关闭或提交之后才会生效
使用步骤
1.全局配置文件中开启二级缓存
- <setting name="cacheEnabled" value="true"/
- 需要使用二级缓存的映射文件处使用cache配置缓存
- <cache /
- 注意:POJO需要实现Serializable接口