Java编程高级框架学习mybatis框架之缓存

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

给你java学习路线:html-css-js-jq-javase-数据库-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

我们今天来分享的是

mybatis 的缓存

缓存小伙伴们应该都有了解一点儿吧!就是我们看电影的时候,有时候就会弹出一句,"网速不好,缓存一下再看".或者就是"进度君在玩命的加载中...".大致就是这些了,那么今天我们就来一起了解一下mybatis框架的缓存.

Mybatis 缓存

缓存的概念

当用户频繁查询某些固定的数据时,第一次将这些数据从数据库中查询出来,保存在缓存(内存,高速磁盘)中.当下次用户再次查询这些数据时,不用再通过数据库查询,而是去缓存里面查询.

减少网络连接和数据库查询带来的损耗,从而提高我们的查询效率,减少高并发访问带来的系统性能问题.

MyBatis 的缓存分为一级缓存和二级缓存

如图所示:

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

Mybatis 的一级缓存是只在同一个 sqlSession 里面应用 Mybatis 的二级缓存可以跨越 sqlSession ,以 mapper 为单位创建,是系统级缓存.

一级缓存

如图所示:

当第一次发出 sql 请求的时候, Mybatis 会从数据库查询,并将结果存入一级缓存中.当在同一个 sqlSession 里面发出同样的 sql 查询请求, Mybatis 会直接从缓存中查找.如果没有,则从数据库查找.

注意:

MyBatis 默认支持一级缓存,不需要另外配置,但是在跟 spring 整合的时候,进行 mapper 代理开发的方式时,mybatis 的一级缓存是不存在的 ,因为代理模板每次调用完之后都会关闭sqlSession.

如果 sqlSession 里面出现 commit 操作, sqlSession 中的缓存会被全部清空,避免出现脏读.

二级缓存

a:Mybatis 的二级缓存是 mapper 级别的,就是说二级缓存是以 Mapper 配置文件的namespace 为单位创建的.

b:Mybatis 的二级缓存需要在 settting 里面加入配置(默认是开启的)

c:需要在 mapper 映射文件加入标签才可以触发此映射文件开启二级缓存.

d:在映射文件用到的查询对象必须序列化 User.java

e:如果需要禁用某个 statment 的缓存 ,可以在这个 statement 里面单独设置 ,比如我们的用户名和密码不需要缓存.

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

好的,我们的二级缓存设置完成了,现在来测试一下.我们把 sqlsession 关闭了.这样就是不用一级缓存了.

我们现在看见的就是二级缓存的效果了

二级缓存的相关配置

eviction: 缓存的回收策略 默认为LRU

LRU:移除近期最少使用的对象

FIFO: FIRST INPUT FIRST OUT 按照进入的时间移除对象

SOFT: 软引用 ,移除基于垃圾回收状态和软引用规则的对象

WEAK :弱引用,更积极的移除基于垃圾回收状态和弱引用规则的对象

flushInterval:刷新缓存,默认不自动刷新,可以为任意的正整数,单位是毫秒时间 ,在增删改操作的时候会刷新.

size:缓存被应用的数目,默认1024次查询的结果

readOnly :缓存的只读属性 ,默认是false,代表缓存不能修改

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

那么各位小伙伴

今天的分享就到这里了

拜拜

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180306A1OD2X00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券