mybatis 中应用二级缓存(使用框架本身实现的缓存机制)
来源:互联网 发布:淘宝主营怎么修改 编辑:程序博客网 时间:2024/05/18 00:44
mybatis 中应用二级缓存(使用框架本身实现的缓存机制)
1. 在mybatis的配置文件中,开启二级缓存(cacheEnabled设置为 true).
在mybatis_config.xml文件中,设置如下:
<settings><!-- 开启二级缓存,默认为true(默认二级缓存是开启的) --><setting name="cacheEnabled" value="true"/></settings>
2. 在实体映射文件中,应用二级缓存:
<cache eviction='FIFO' flushInterval='60000' size='512' readOnly='true'/>其中各项属性代表的含义为:
flushInterval(刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。
size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值是1024。
readOnly(只读)属性可以被设置为true或false。只读的缓存会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是false。
eviction配置创建了一个 FIFO 缓存,并每隔 60 秒刷新,存数结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改它们会导致冲突。可用的收回策略有, 默认的是 LRU:
1. LRU – 最近最少使用的:移除最长时间不被使用的对象。
2. FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
3. SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
4. WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
3. 缓存对象执行序列化
由于二级缓存的数据不一定都是存储到内存中,它的存储介质多种多样,所以需要给缓存的对象执行序列化。
如果该类存在父类,那么父类也要实现序列化,类似如下写法:
public class Emp implements Serializable {
}
到这里,二级缓存配置完成。
在应用二级缓存过程中,我们还可以禁用二级缓存:
<!-- 查询全部员工信息 --><select id="findAllEmp" resultType="cn.sz.hcq.pojo.Emp" useCache="false">select empno, ename, job, mgr, hiredate, sal, comm from emp</select>
该statement中设置userCache=false可以禁用当前select语句的二级缓存,即每次查询都是去数据库中查询,默认情况下是true,即该statement使用二级缓存.
还可以刷新二级缓存:
<!-- 查询全部员工信息 --><select id="findAllEmp" resultType="cn.sz.hcq.pojo.Emp" flushCache="true">select empno, ename, job, mgr, hiredate, sal, comm from emp</select>
下面是演示案例:
在mysql数据库中建一张emp表,表的字段如下:
本人演示的项目是Maven项目:
项目结构如下:
IEmpDAO.java为接口,提供查询emp的方法,EmpDAOImpl.java为接口的实现类,MybatisSqlSessionFactory.java为本人创建的获取sqlSession的工具类,Emp.java为实体类,Emp.xml为映射文件,log4j.properties为mybatis打印日志,mybatis_cfg.xml为mybatis主配置文件,Test.java为测试类,pom.xml为maven引入依赖的文件。
我在项目中使用二级缓存,测试的方法是根据员工的编号查询员工的信息。
1、IEmpDAO.java (提供一个根据员工编号查询员工信息的接口方法)
2、EmpDAOImpl.java 为接口的实现类
3、MybatisSqlSessionFactory.java 为本人创建的获取sqlSession的工具类
4、Emp.java为实体类
5、Emp.xml为映射文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="cn.sz.hcq.pojo.Emp"><!-- 配置二级缓存 --><cache eviction='FIFO' flushInterval='60000' size='512' readOnly='true' /><!-- 根据员工编号查询员工信息 --><select id="findEmpByEmpno" parameterType="java.lang.Integer"resultType="cn.sz.hcq.pojo.Emp" useCache="true">selectempno,ename,job,mgr,sal,comm,hiredate fromempwhereempno=#{empno}</select></mapper>
6、log4j.properties为mybatis打印日志
7、mybatis_cfg.xml为mybatis主配置文件
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 配置的参数 --><settings><!-- 开启二级缓存,默认为true(默认二级缓存是开启的) --><setting name="cacheEnabled" value="true" /></settings><!--数据源 --><environments default="myconn"><environment id="myconn"><!--事务管理方式 --><transactionManager type="JDBC"></transactionManager><!--数据库连接参数 --><dataSource type="POOLED"><!-- type:数据源连接的方式 ,POOLED:连接池方式, UNPOOLED: 非连接池的方式 ,JNDI:java命名与目录接口方式 --><property name="driver" value="org.gjt.mm.mysql.Driver"></property><property name="url" value="jdbc:mysql://localhost:3306/db"></property><property name="username" value="root"></property><property name="password" value="root"></property></dataSource></environment></environments><!-- 引入实体映射文件 --><mappers><mapper resource="cn/sz/hcq/pojo/Emp.xml" /></mappers></configuration>
8、pom.xml为maven引入依赖的文件
9、Test.java为测试类
在测试中我们两次调用查询方法,在控制台的日志信息中发现我们的sql语句只是执行了一次,因为第二次查询的时候数据从二级缓存中取出(第一次查询时将数据保存到了二级缓存中)。
下面是日志的截图:
阅读全文
0 0
- mybatis 中应用二级缓存(使用框架本身实现的缓存机制)
- mybatis的缓存机制(一级缓存二级缓存)
- Mybatis的一级缓存和二级缓存机制
- mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache
- mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache
- mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache
- mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache
- 详解:mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache
- 【Mybatis框架】查询缓存(二级缓存)
- 10019---mybatis的缓存机制(一级缓存二级缓存和刷新缓存)
- MyBatis缓存二级缓存的使用细节
- 《深入理解mybatis原理(六)》 MyBatis缓存机制的设计与实现如何细粒度地控制你的MyBatis二级缓存
- 深入理解mybatis原理(六) MyBatis缓存机制的设计与实现如何细粒度地控制你的MyBatis二级缓存
- 《深入理解mybatis原理(六)》 MyBatis缓存机制的设计与实现如何细粒度地控制你的MyBatis二级缓存
- MyBatis的二级缓存机制
- MyBatis 缓存机制深度解剖 / 自定义二级缓存
- MyBatis 缓存机制深度解剖 / 自定义二级缓存
- MyBatis 缓存机制深度解剖 / 自定义二级缓存
- Linux 抓包
- 《自己动手写操作系统》,软盘没有,用U盘引导,大白菜MBR Boot启动512字节反汇编代码!
- node-easymock, 在nodejs中,一个简单但强大的模拟服务器
- 1013. 数素数 (20)
- ghrabber, 从Github抓取匹配搜索规范的文件
- mybatis 中应用二级缓存(使用框架本身实现的缓存机制)
- 安装boost库
- NASA
- glide 出现OutOfMemoryError
- jquery-datalink, jQuery的数据链接插件
- Ubuntu下安装单机版hbase
- cryptfs-password-manager, Android设备加密密码管理器
- 如何解决443端口被System进程占用,导致https访问只能带着端口号的问题
- 不规则二维数组