一级缓存:是sqlSession级别的缓存。在操作数据库时要构造sqlSession对象,在对象中用HashMap存储缓存数据。不同的sqlSession之间的缓存数据区域互不影响。原理:第一次查询时查找sql查询出的结果,即是否存在缓存,不存在就从数据库查找信息,存在就直接从缓存中读取。可以用commit清空缓存以避免脏读
二级缓存:是mapper级别的缓存,多个sqlSession操作同一个Mapper的sql语句,多个sqlSession可以共用二级缓存,二级缓存是跨sqlSession的,范围更大,多个sqlSession可以共享一个二级缓存区域,二级缓存按namespace划分,如果两个mapper的namespace相同,则具有相同的二级缓存区域
开启二级缓存:在核心配置文件加入
<setting name="cacheEnabled" value="true"/>
默认为true
useCache=false可以禁用当前select语句的二级缓存,即每次查询都会发出sql去查询,默认为true。
<select id="findOrderListResultMap" resultMap="oderUuserMap" useCache="false">
刷新缓存:
<insert id="insertUser" parameterType="po.User" flushCache="true">