为什么会用到缓存?
为了减少与数据库链接所消耗的时间,将查询到的内容放到内存中去,下次查询直接取用就ok了。
缓存的种类:
一级缓存:一级缓存是 SqlSession 级别的缓存,只要 SqlSession 没有 flush 或 close,它就存在(默认开启无需配置)。
二级缓存:二级缓存是 mapper 映射级别的缓存,多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句,多个SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的。
二级缓存结构图:
查询两次id为52的用户
查询语句只执行一次(user1和user2相同)
查询两次id为52的用户,中途关闭Sqlsession对象
执行两遍SQl语句(user1和user2不相同了):
查询两次id为52的用户,中途插入更新操作
执行便便SQL语句(user1不等于user2):
二级缓存
二级缓存的开启与关闭
第一步:在 mybatis-config.xml 文件开启二级缓存
<settings> <!-- 开启二级缓存的支持 --> <setting name="cacheEnabled" value="true"/> </settings> <!--因为 cacheEnabled 的取值默认就为 true,所以这一步可以省略不配置。为 true 代表开启二级缓存;为false 代表不开启二级缓存。-->
第二步:配置相关的 Mapper 映射文件
<!-- <cache>标签表示当前这个 mapper 映射将使用二级缓存,区分的标准就看 mapper 的 namespace 值。--> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zyb.dao.UserDao"> <!-- 开启二级缓存的支持 --> <cache></cache> </mapper>
第三步:配置 statement 上面的 useCache 属性
注意: