MyBatis缓存详解

<settings>
	<!-- 这个配置使全局的映射器启用或禁用缓存 -->
	<setting name="cacheEnabled" value="true"/>
	<!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 -->
	<setting name="lazyLoadingEnabled" value="true"/>
	<!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载 -->
	<setting name="aggressiveLazyLoading" value="true"/>
	<!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动) -->
	<setting name="multipleResultSetsEnabled" value="true"/>
	<!-- 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动 -->
	<setting name="useColumnLabel" value="true"/>
	<!-- 允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby) -->
	<setting name="useGeneratedKeys" value="true"/>
	<!-- 指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况) -->
	<setting name="autoMappingBehavior" value="PARTIAL"/>
	<!-- 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新 -->
	<setting name="defaultExecutorType" value="SIMPLE"/>
	<!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 -->
	<setting name="defaultStatementTimeout" value="25000"/>
</settings>


然后是SQL映射文件的配置

<cache   
    eviction="FIFO"   
    flushInterval="60000"   
    size="1024"   
    readOnly="true"/>

 
 
1. 所有在映射文件里的select 语句都将被缓存。
2. 所有在映射文件里insert,update 和delete 语句会清空缓存。
3. 缓存使用“最近很少使用”算法来回收
4. 缓存不会被设定的时间所清空。
5. 每个缓存可以存储1024 个列表或对象的引用(不管查询出来的结果是什么)。
6. 缓存将作为“读/写”缓存,意味着获取的对象不是共享的且对调用者是安全的。不会有其它的调用

可用的收回策略(eviction)有: 

LRU –  最近最少使用的:移除最长时间不被使用的对象。 

FIFO –  先进先出:按对象进入缓存的顺序来移除它们。 

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

WEAK –  弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。 

默认的是 LRU

 

flushInterval(刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段默认情况是不设置也就是没有刷新间隔,缓存仅仅调用语句时刷新。 

size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值1024。 

readOnly(只读)属性可以被设置为 true 或 false。只读的缓存会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是false

 

 

一、MyBatis的Cache配置
1、全局开关:默认是true,如果它配成false,其余各个Mapper XML文件配成支持cache也没用。
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>

2、各个Mapper XML文件,默认是不采用cache。在配置文件加一行就可以支持cache:
 <cache />


3、Mapper XML文件配置支持cache后,文件中所有的Mapper statement就支持了。此时要个别对待某条,需要:
<select id="inetAton" parameterType="string" resultType="integer" useCache=“false”>  
select inet_aton(#{name})
</select>


 

4、刷新缓存的属性:flushCache="true"

在进行查找时就会直接从数据库查询而不是从缓存中查询,所以这样得来的数据才是最新的。


二、注意的几个细节
1、如果readOnly为false,此时要结果集对象是可序列化的。
<cache readOnly="false"/>

2、在SqlSession未关闭之前,如果对于同样条件进行重复查询,此时采用的是local session cache,而不是上面说的这些cache。

3、MyBatis缓存查询到的结果集对象,而非结果集数据,是将映射的PO对象集合缓存起来。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一种持久层框架,它提供了一种将数据库操作与Java代码解耦的方式。总配置文件(configuration file)是MyBatis的核心配置文件,它包含了整个框架的全局配置信息。下面是对MyBatis总配置的详细解释: 1. 数据源配置(dataSource):指定数据库连接信息,包括数据库驱动、URL、用户名和密码等。 2. 类型别名配置(typeAliases):为Java对象设置别名,简化在映射文件中的类型引用。 3. 插件配置(plugins):用于扩展或修改MyBatis的核心功能,例如增加拦截器来实现自定义的逻辑。 4. 对象工厂配置(objectFactory):用于创建结果对象的实例,默认情况下使用默认的对象工厂。 5. 反射工厂配置(objectWrapperFactory):用于创建对象属性的包装器,默认情况下使用默认的反射工厂。 6. 数据库厂商标识配置(databaseIdProvider):根据不同的数据库厂商提供不同的SQL语句,以达到最佳性能。 7. 缓存配置(caches):配置缓存实现方式和策略,包括一级缓存和二级缓存。 8. 全局配置属性(properties):用于设置全局级别的配置属性,可以在映射文件中引用。 9. 环境配置(environments):指定MyBatis的运行环境,包括事务管理器和数据源等。 10. 映射器配置(mappers):指定映射器(Mapper)接口或映射文件的位置,用于定义SQL语句和映射规则。 以上是MyBatis总配置文件的主要内容,通过对这些配置进行合理的设置,可以实现对数据库的访问和操作。请注意,这只是总配置文件的概览,具体的配置细节和使用方法可以参考MyBatis官方文档或相关教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值