Mybatis缓存及配置
来源:互联网 发布:全国省市区街道数据库 编辑:程序博客网 时间:2024/06/05 04:48
- 问题引入:在本次查询中,因为查询多张表,中间还有遍历来构建一个树形菜单,导致查询时间达到7秒,ORM框架用的是Mybatis,考虑使用Mybatis的二级缓存。
- Mybatis的缓存分类:延迟加载,一级缓存,二级缓存
- 延迟加载:严格来说延迟加载不属于Mybatis缓存的范畴,但它的目的也是提高查询速度,所以在这一块说下。它是指在做关联查询时,利用延迟加载,先加载主信息,需要使用关联信息时再去加载关联信息。resultMap的association和collection的标签具有延迟加载的功能。需要在setting标签中配置来让延迟加载生效,如下:
<?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>
<!-- 打开延迟加载的开关 ,默认是false-->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 将积极加载改为消息加载即按需加载 ,默认是true-->
<setting name="aggressiveLazyLoading" value="false" />
<!-- 开启驼峰 -->
<setting name="mapUnderscoreToCamelCase" value="true" />
<!-- 开启打印sql -->
<setting name="logImpl" value="STDOUT_LOGGING" />
<!-- 缓存开启 ,默认为false-->
<setting name="cacheEnabled" value="true"/>
</settings>
<typeAliases>
</typeAliases>
</configuration>
lazyLoadingEnabled和aggressiveLazyLoading配置的就是延迟加载的。我这边一般都是这样配置的。上面那个文件命名为:mybatis-env-setting.xml。在mybatis的核心配置文件mybatis.xml中配置sqlSessionFactory时将mybatis-env-setting.xml文件作为参数引入进来,如下:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-env-setting.xml" /> <property name="mapperLocations" value="classpath:com/mappers/*.xml" /> </bean>
这样就引入了延迟加载的配置(二级缓存也是这样配置的)。
4. 一级缓存:Mybatis的一级缓存指的是sqlSession缓存,默认是开启的,它是会话级别的缓存,作用域是sqlsession。如:
serviceImpl{
//初始化创建sqlSession
第一次调用mapper的findUserById(1); //从数据库中读
第二次调用mapper的findUserById(1); //从一级缓存中读数据
//处理完毕关闭sqlsession
}
在一次查询中两次用到的findUserById(1)方法,那么第二次会从一级缓存中读数据,但是如果是两次执行这个serviceImpl方法,则第二次依然不会从一级缓存中读数据,因为sqlSession已经关闭了,一级缓存被清空了。可以看到一级缓存的局限性还是挺大的。
5. 二级缓存:二级缓存是指mapper的映射文件,它的作用域是namespace下mapper映射文件的内容,默认不开启,使用时需要自己配置。多个sqlSession可以共享二级缓存。在同一个namespace的mapper文件中,执行相同的sql第一次会去数据库中查询,并把查询结果写入缓存中,第二次再查询时,直接从缓存中查询数据。在两次查询之间如果发生了增删改操作,则二级缓存会被清空。
6. 如何开启二级缓存:1.在mybatis-env-setting.xml文件中将cacheEnabled改为true,开启全局二级缓存;2.在需要用二级缓存的mapper.xml文件中配置成如下:
<mapper namespace="com.dao.ImMenuDao" >
<!-- Cache 配置 -->
<cache
eviction="FIFO" <!--回收策略为先进先出-->
flushInterval="60000" <!--自动刷新时间60s-->
size="512" <!--最多缓存512个引用对象-->
readOnly="true" /> <!--只读-->
//这里是增删查改的sql,全部省略
</mapper>
到这里配置二级缓存的就结束了,经测试请求时间2秒多,速度提高了将近3倍。
7. 禁用二级缓存和刷新缓存:可以在mapper.xml中需要使用的statement中这样配置:userCache=false,禁止使用缓存;flushCache=true,刷新缓存
- Mybatis缓存及配置
- Mybatis配置缓存
- MyBatis缓存配置
- Mybatis redis 缓存配置
- MyBatis缓存配置
- mybatis缓存配置
- Mybatis配置分布式缓存
- Mybatis缓存配置
- mybatis配置ehcache缓存
- MyBatis缓存配置
- MyBatis缓存使用及理解
- Mybatis--缓存及整合ehcache
- MyBatis的缓存配置(Cache)
- 关于mybatis缓存配置讲解
- spring+mybatis+ehcache配置缓存
- mybatis缓存文件的配置
- Mybatis配置及使用
- Mybatis介绍及配置
- 如何使用STM8S单片机的多通道AD转换
- MySQL系列课程之二MySQL数据库的安装及配置
- 添加购物车动画效果
- 数位DP
- Java API--IO流整理
- Mybatis缓存及配置
- [USACO10MAR]伟大的奶牛聚集
- 趣味试题:A、B两人分别在两座岛上......
- 论js的段位级别
- title: Servlet基础(一):servlet的生命周期
- 原声JS中indexOf()方法在数组中的应用一
- HTML5(2)__初识H5
- linux下PS1命令提示符设置
- Android TextView设置图标,调整图标大小