MyBatis学习笔记(九)缓存
2015-09-03 16:46
399 查看
在高并发的应用中,为提高访问速度,减少数据库的访问,可以使用缓存机制.
MyBatis缓存分为一级缓存和二级缓存.
一级缓存
MyBatis的一级缓存指的是在一个Session域内,session为关闭的时候执行的查询会根据SQL为key被缓存(跟mysql缓存一样,修改任何参数的值都会导致缓存失效)
跟Spring集成的时候(使用mybatis-spring)
直接在dao里查询两次同样参数的sql
二级缓存
二级缓存就是global caching,它超出session范围之外,可以被所有sqlSession共享,它的实现机制和mysql的缓存一样,开启它只需要在mybatis的配置文件开启settings里的
以及在相应的Mapper文件(例如userMapper.xml)里开启
需要注意的是global caching的作用域是针对Mapper的Namespace而言的,也就是说只在有在这个Namespace内的查询才能共享这个cache.例如上面的 dao.userdao namespace
MyBatis缓存分为一级缓存和二级缓存.
一级缓存
MyBatis的一级缓存指的是在一个Session域内,session为关闭的时候执行的查询会根据SQL为key被缓存(跟mysql缓存一样,修改任何参数的值都会导致缓存失效)
跟Spring集成的时候(使用mybatis-spring)
直接在dao里查询两次同样参数的sql
@Repository public class UserDao extends SqlSessionDaoSupport { public User selectUserById(int id) { SqlSession session = getSqlSession(); session.selectOne("dao.userdao.selectUserByID", id); // 由于session的实现是SqlSessionTemplate的动态代理实现 // 它已经在代理类内执行了session.close(),所以无需手动关闭session return session.selectOne("dao.userdao.selectUserByID", id); } }这里执行了2次sql查询,看似我们使用了同一个sqlSession,但是实际上因为我们的dao继承了SqlSessionDaoSupport,而SqlSessionDaoSupport内部sqlSession的实现是使用用动态代理实现的,这个动态代理sqlSessionProxy使用一个模板方法封装了select()等操作,每一次select()查询都会自动先执行openSession(),执行完close()以后调用close()方法,相当于生成了一个新的session实例,所以我们无需手动的去关闭这个session()(关于这一点见下面mybatis的官方文档),当然也无法使用mybatis的一级缓存,也就是说mybatis的一级缓存在spring中是没有作用的.
二级缓存
二级缓存就是global caching,它超出session范围之外,可以被所有sqlSession共享,它的实现机制和mysql的缓存一样,开启它只需要在mybatis的配置文件开启settings里的
<setting name="cacheEnabled" value="true"/>
以及在相应的Mapper文件(例如userMapper.xml)里开启
<mapper namespace="dao.userdao"> ... select statement ... <!-- Cache 配置 --> <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" /> </mapper>
需要注意的是global caching的作用域是针对Mapper的Namespace而言的,也就是说只在有在这个Namespace内的查询才能共享这个cache.例如上面的 dao.userdao namespace
相关文章推荐
- 系统性能信息模块篇psutil之系统进程管理方法
- HDU1032 - The 3n + 1 problem (暴力)
- tar 压缩与解压命令(汇总)
- VMware配置桥接方式(Bridged)
- TCP&UDP部分细节
- Regionals 2014 >> Latin America >> 6828 - Help cupid
- POJ 2987 Firing(最大权闭合)
- net extjs tree异步加载数据
- Ubuntu中安装mongodb的问题
- Spring mvc的相关问题
- poj 1195 Mobile phones (二维树状数组)
- JDK5至JDK8的新特性
- 哈希
- 电话本管理系统(使用数组)
- 滑动窗口_单调队列入门 (白书P241)
- 二分查找
- Matlab界面设计入门
- for 语句头中多个定义
- 替换空格
- 数据结构 1____概论