我们为什么要使用Mybatis?
这里就要提到JDBC的一些弊端:如硬编码问题,SQL参数固定,代码重复以及底层的一些问题
为了解决这些问题,我们采用了Mybatis
Mybatis是什么?
Mybatis是一个基于Java的持久层框架(半自动)。
持久层框架就是操作数据库的框架,对之前使用的JDBC代码进行了封装。
它支持定制化SQL,存储过程以及高级映射从而解决了JDBC的弊端等问题
Mybatis为什么要使用缓存
为了减少Java Applicationd与数据库的交互次数,减少系统开销从而提高程序的运行效率
Mybatis默认定义了两级缓存:一级缓存和二级缓存
一级缓存
一级缓存是Mybatis默认开启的缓存,它是session级别的缓存也称为本地缓存,一级缓存只是相对于同一个SqlSession对象而言,一级缓存中最大的共享范围就是一个SqlSession内部
一级缓存工作流程
1.将查询的数据缓存在内存中,
2.再次查询时先在缓存空间找看是否由对应的数据
3.如果命中,直接使用缓存空间的数据,不用去数据库查询
4.如果未命中,则去数据库查找相对应数据
5.将在数据库查到的数据存到缓存空间
6.将查询结构返回
7.判断缓存级别是否为STAEMENT级别,如果是的话,清空本地缓存
一级缓存失效的情况
同一个sqlsession两次查询期间执行了任何一次增,删,改,提交事务等方法时就会清空一级缓存
不同sqlsession对应不同的一级缓存
同一个sqlsession但查询条件不同
同一个sqlsession两次查询期间手动清除了一级缓存 (sqlSession.clearCache())
二级缓存
二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
二级缓存配置步骤(XML)
在mybatis.xml(主配置文件)中的settings标签中添加<setting name="cacheEnabled" value="true" />开启二级缓存
在mapper.xml(sql映射文件中)的mapper标签中添加<cache/>标签开启二级缓存
在使用的操作中配置(在select标签中配置) useCache="true"
二级缓存配置步骤(注解)
在mybatis.xml(主配置文件)中的settings标签中添加 <setting name="cacheEnabled" value="true" />开启二级缓存 二级缓存相对于一级缓存来说,二级缓存极大可能会出现错误数据,有设计上的缺陷,安全使用的条件比较苛刻
分布式环境下,必然会出现读取到错误 数据,所以不推荐使用