| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> MyBatis缓存机制 -> 正文阅读 |
|
[大数据]MyBatis缓存机制 |
为什么使用缓存呢?? ? ? ? 因为通过缓存机制,可以减少对数据库的查询次数,从而提高性能! 一级缓存? ? ? ? 一句话总结,一级缓存是SqlSessio范围里的缓存,在MyBatis框架中,一级缓冲是默认开启的。
我们来用上面的代码举个例子,通过MyBatisUtils我们获取一个SqlSession,通过这个SqlSession我们执行了俩次一模一样的查询语句,通过Log4j,我们可以看到sql语句执行的情况,如下图: ?可以很明显的发现,sql语句只执行了一次!这就是MyBatis默认开启的一级缓存。 ????????那么当SqlSession关闭后,缓存就消失了,这样感觉还是很不给力啊,于是咱们就可以手动开启二级缓存,扩大缓存范围,进一步减少sql查询的次数,从而提高性能!二级缓存? ? ? ? 二级缓存是mapper映射级别的缓存,当多个SqlSession去操作用一个Mapper映射的sql语句时,多个SqlSession可以公用一个Mapper映射的sql语句,多个SqlSesson可以公用二级缓存,即二级缓存是跨SqlSession的。触发二级缓存的条件是,查询语句的条件相同,如果数据库的数据发生变化后,即提交了增删改方法,那么二级缓存中的数据会被清空的,图解如下: ?二级缓存机制是需要人为手动配置的,那么怎么配置呢?看如下内容! 第一步:咱们的实体类要实现Serializable接口,如下图 ?第二步:在MyBatis核心配置文件中开启二级缓存
注意:因为cacheEnabled的取值默认就位true,所以这一步可以省略不配置。为true代表开启二级缓存;为false代表不开启二级缓存。 第三步:在需要开启二级缓存的映射文件中使用<cache>标签,在sql语句中配置 userCache ="true"即可。 ?注意:针对每次查询都需要最新的数据sql,要设置成userCache=false,禁用二级缓存。 那么接下来让我们来测试一下!
在这个测试类中,创建了2个SqlSession,执行相同的sql查询语句。查询的结果如下: ?根据Log4j产生的信息可以看到,虽然我们使用了2个SqlSession,可是Sql查询语句只执行了一次,即第二次查询的结果是在缓存中拿到的,而不是通过执行sql语句拿到的!!! 缓存失效情况????????当调用 SqlSession 的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存,类似的执行了增删改,即数据库中的数据发生了改变后,二级缓存的数据也会被清空。 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 20:48:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |