Mybatis高级特性学习(三)

来源:互联网 发布:量化程序员 招聘 编辑:程序博客网 时间:2024/05/21 09:01

主要内容:缓存、缓存测试和缓存应用


1. 什么是查询缓存

Mybatis提供查询缓存,提高查询效率,降低数据库压力

Mybatis缓存分为一级缓存、二级缓存

一级缓存:

在操作数据库时,需要构造SqlSession对象,在对象中有一块内存区域:hashMap,用于存储缓存数据。

注:不同sqlsession之间的缓存区域是互不影响的

二级缓存:

mapper级别的缓存,多个sqlSession去操作同一个mapper的SQL语句,多个sqlSession去操作数据库得到的数据库会存储在二级缓存区域。二级缓存是跨session的。


2. 一级缓存

Mybatis默认支持一级缓存,不需要配置。

@Testpublic void findUserByCache() {SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//第一次发起请求,查看是否发出sqlUser user1 = userMapper.findUserById(1);System.out.println(user1);//第二次发起请求,查看是否发出sqlUser user2 = userMapper.findUserById(1);System.out.println(user2);sqlSession.close();}

3. 二级缓存

mapper的二级缓存区域是按照namespace区分的。每一个namespace的mapper有一个二级缓存区域。

开启二级缓存:

1)SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存。

<settings><!-- 打开延迟加载的开关 --><setting name="lazyLoadingEnabled" value="true"></setting><!-- 将积极加载改为消极加载 按需加载 --><setting name="aggressiveLazyLoading" value="false"></setting><!-- 开启二级缓存 --><setting name="cacheEnabled" value="true"></setting></settings>
<!-- 开启本Mapper的namespace下的二级缓存 --><cache></cache>
2) POJO实现序列化接口,为了将缓存数据取出执行反序列化操作。因为二级缓存的存储介质不一定是内存

public class User implements Serializable {/** *  */private static final long serialVersionUID = 4504125303107628364L;
参数设置:

禁用二级缓存:useCache="false"   例:<select id=".." resultMap=".." useCache="false"></select>

刷新缓存:flushCache="true"  <insert id="..." parameterType=".." flushCache="true"></insert>







0 0
原创粉丝点击