Mybatis一级缓存和二级缓存
来源:互联网 发布:淘宝店过户费用 编辑:程序博客网 时间:2024/05/01 07:05
目录
- 目录
- MyBatis一级缓存
- MyBatis二级缓存
- MySql缓存机制
MyBatis一级缓存
MyBatis一级缓存是sesssion会话级别的缓存,是基于当前SqlSession对象的,MyBatis一级缓存实际上是以当前sql为key对执行语句进行缓存(跟mysql缓存一样,修改任何参数的值都会导致缓存失效)
public class Test { public static void main(String[] args) throws IOException { String config = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(config); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); SqlSession session = factory.openSession(); System.out.println(session.selectOne("selectUserByID", 1)); // 同一个session的相同sql查询,将会使用一级缓存 System.out.println(session.selectOne("selectUserByID", 1)); // 参数改变,需要重新查询 System.out.println(session.selectOne("selectUserByID", 2)); // 清空缓存后需要重新查询 session.clearCache(); System.out.println(session.selectOne("selectUserByID", 1)); // session close以后,仍然使用同一个db connection session.close(); session = factory.openSession(); System.out.println(session.selectOne("selectUserByID", 1)); }}
>如果单独使用Mybatis的话可以对常用的查询进行缓存优化,但是结合spring框架后一级缓存将会失效
整合spring后一级缓存失效是因为整合后是sqlSession的内部实现是使用动态代理实现的,这个动态代理sqlSessionProxy使用一个模板方法封装了select()等操作,每一次select()查询都会自动先执行openSession(),执行完close()以后调用close()方法,相当于每次都是生成了一个新的session实例,所以这样就无法使用mybatis以及缓存。
整合spring后一级缓存失效的原因是因为由spring管理后,spring的session代理封装了select()等操作。每次执行sql后都会调用close()方法,相当于每次都会产生一个新的session实例,所以整合spring后一级缓存是失效的
MyBatis二级缓存
二级缓存相比于一级缓存二级缓存是全局性的缓存不受限于spring动态代理一个查询一个session实例的限制
MySql缓存机制
mysql缓存也是缓存sql文本和查询结果,根据查询语句获取一个hash值然后去查看缓存,如果没有匹配缓存则再次去解析和执行sql。
mybatis缓存机制详解
mybatis一二级缓存略解
mysql缓存机制详解
mysql缓存机制配置文件优化
缓存机制的劣处,不推荐使用的原因
阅读全文
0 0
- mybatis一级缓存和二级缓存
- Mybatis 一级缓存和二级缓存
- MyBatis一级缓存和二级缓存
- mybatis 一级缓存和二级缓存
- Mybatis一级缓存和二级缓存
- mybatis一级缓存、二级缓存和自定义二级缓存
- MyBatis缓存分为一级缓存和二级缓存
- MyBatis一级缓存,二级缓存
- MyBatis 一级缓存,二级缓存
- mybatis一级缓存二级缓存
- mybatis 一级缓存和二级缓存简介
- 八、Mybatis一级缓存和二级缓存
- Mybatis的一级缓存和二级缓存-2
- Mybatis - 一级缓存和二级缓存 -1
- 【Mybatis】(五)一级缓存和二级缓存
- MyBatis的一级缓存和二级缓存
- Mybatis的一级缓存和二级缓存机制
- mybatis--缓存(一级和二级缓存)
- PyTorch笔记3-分类
- Python里直接开发cad
- Java套接字编程---TCP
- 算法课作业系列8——Knight Probability in Chessboard
- 实现基于LVS负载均衡集群的电商网站架构
- Mybatis一级缓存和二级缓存
- windows下python环境搭建
- 基于spark实现kmeans的更新聚类中心的关键代码
- 三目运算符的理解
- leetcode 189. Rotate Array
- 前(中后)序表达式讲解
- 异常 三角形
- POJ
- LeetCode 349: Intersection of Two Arrays