转自:http://my.oschina.net/dxqr/blog/123163
和hibernate一样,mybatis也有缓存机制
一级缓存是基于 PerpetualCache(mybatis自带)的 HashMap 本地缓存,作用范围为session,所以当session commit或close后,缓存就会被清空
二级缓存默认也是基于 PerpetualCache,但是可以为其制定存储源,比如ehcache
一级缓存缓存的是SQL语句,而二级缓存缓存的是结果对象,看如下例子(mybatis的日志级别设为debug)
1
2
3
4
5
6
7
8
|
List<User> users = sqlSession.selectList( "com.my.mapper.UserMapper.getUser" , "jack" );
System.out.println(users); //sqlSession.commit();① List<User> users2 = sqlSession.selectList( "com.my.mapper.UserMapper.getUser" , "jack" ); //②admin
System.out.println(users); |
结果是只发起一次SQL语句,如果我们把②出的参数jack改为admin,发现还是只发起一次SQL语句,但是会设置不同参数
如果把①处去掉注释,会发现不会有缓存了
下面就来启用二级缓存
在配置文件中启用二级缓存
1
|
< setting name = "cacheEnabled" value = "true" />
|
在需要进行缓存的mapper文件UserMapper.xml中加上
1
|
< cache readOnly = "true" ></ cache >
|
注意这里的readOnly设为true,默认是false,表示结果集对象需要被序列化
我们打开①处注释,②处仍然使用jack,我们发现结果只执行了一次SQL语句
但是如果把②处改为admin,执行了2次SQL语句,这说明二级缓存是缓存结果集对象的
下面我们来使用ehcache
在classpath下添加ehcache.xml
在UserMapper.xml中添加:
1
2
|
<!-- <cache readOnly="true" type="org.mybatis.caches.ehcache.LoggingEhcache"/> --> < cache type = "org.mybatis.caches.ehcache.EhcacheCache" />
|
用上面那个会输出更加详细的日志,下面的不会
需要用到ehcache.jar,下载地址:http://sourceforge.net/projects/ehcache/files/ehcache/ehcache-2.7.0/ehcache-2.7.0-distribution.tar.gz/download
mybatis-ehcache.jar下载地址:http://code.google.com/p/mybatis/downloads/detail?name=mybatis-ehcache-1.0.2-SNAPSHOT-bundle.zip&can=3&q=Product%3DCache
相关推荐
在使用Mybatis缓存时,需要注意以下几点: 1. 数据一致性:由于缓存的存在,可能会导致数据的延迟更新,因此在处理实时性要求高的业务时,需要谨慎使用缓存。 2. 缓存命中率:合理的缓存策略可以提高缓存的利用率,...
"深入理解MyBatis中的一级缓存与二级缓存" MyBatis是一种流行的持久层框架,它提供了缓存机制来提高应用程序的性能。在MyBatis中,有两种类型的缓存:一级缓存和二级缓存。下面我们将深入了解MyBatis中的一级缓存和...
Mybatis 是一款流行的Java持久层框架,它简化了数据库操作,通过XML或注解的方式将SQL与Java代码...通过这个测试示例,开发者不仅可以学习到Mybatis缓存的基本使用,还能了解到如何在实际项目中对其进行测试和调优。
总的来说,《Mybatis缓存开源架构源码2021》这份文档很可能会涵盖 MyBatis 缓存体系的各个方面,包括一级缓存和二级缓存的使用、配置、源码解析以及实际开发中的注意事项。对于想深入了解 MyBatis 缓存机制的开发者...
Mybatis 是一款流行的Java持久层框架,它简化了数据库操作,通过XML或注解的方式将SQL...本教程的17页内容将会详尽地讲解Mybatis缓存的各个方面,包括配置、使用示例以及最佳实践,帮助开发者更好地掌握这一关键特性。
首先,我们要理解MyBatis的缓存分为一级缓存和二级缓存。一级缓存是SqlSession级别的,也被称为本地缓存,它存储在SqlSession对象内部。当我们在同一个SqlSession内执行相同的SQL语句时,MyBatis会优先从一级缓存中...
至于"工具"标签,可能是指使用一些辅助工具来管理和查看MyBatis的缓存,比如通过日志监控、性能分析工具等,这些可以帮助我们更好地理解和调整缓存的性能。 在文件列表"mybatis-04"中,可能包含了MyBatis的配置文件...
首先,理解MyBatis的缓存机制。MyBatis提供了两级缓存:一级缓存是SqlSession级别的,存在于SqlSessionFactory内部,而二级缓存是全局的,可以在多个SqlSession之间共享。默认情况下,一级缓存是开启的,但二级缓存...
4. **在Mapper接口和XML中使用缓存**:在MyBatis的Mapper接口中,使用`@CacheNamespace`注解标记整个接口,以启用缓存。然后在具体的查询方法上使用`@CacheNamespaceRef`注解,指定使用哪个缓存区域。在对应的Mapper...
MyBatis 是一款深受开发者喜爱的 Java 持久层框架,它简化了数据库操作,提供了 SQL 映射功能和对象关系映射。...通过 `mybatis-test` 相关的测试代码,开发者可以深入理解 MyBatis 缓存机制并优化其使用。
标题中的“mybatis二级缓存”指的是MyBatis框架中的一个重要特性,它是MyBatis缓存机制的一部分,用于提升数据库查询效率。MyBatis一级缓存是SqlSession级别的,而二级缓存则是在整个Mapper配置范围内的全局缓存,...
MyBatis 是一款优秀的持久层框架,它支持...理解并合理运用 MyBatis 的缓存机制,能显著提高应用程序的性能,减少对数据库的访问压力。在实际开发中,要根据项目需求和环境来调整缓存策略,确保系统的稳定性和高效性。
本篇笔记将深入探讨MyBatis的缓存机制,包括一级缓存和二级缓存的概念、工作原理、配置与使用。 一级缓存是SqlSession级别的缓存,每当执行一个SQL查询时,如果结果不在缓存中,MyBatis会将其放入一级缓存。当同一...
总结,MyBatis二级缓存是一项实用的性能优化技术,但使用时需注意其工作原理和潜在的问题,合理配置和管理才能发挥最大效能。通过理解和实践,我们可以更好地掌握这一工具,提高应用的运行效率。
6. **缓存策略**: Hibernate的二级缓存可以用于提高数据访问速度,而MyBatis可以通过插件实现自己的缓存机制,两者结合可以构建更高效的缓存体系。 7. **错误调试**: MyBatis的SQL日志记录功能可以帮助开发者快速...
通过对MyBatis缓存机制的深入理解,开发者可以更有效地利用缓存提升应用性能,同时避免并发控制和数据一致性的问题。通过自定义缓存策略,还可以根据项目需求调整缓存的行为,比如使用更复杂的排除算法或调整缓存...
在使用MyBatis时,我们需要理解其核心组件和工作原理,以便更好地进行数据库操作。 一、MyBatis核心配置文件 MyBatis的核心配置文件通常命名为`mybatis-config.xml`,它是整个MyBatis系统的总配置文件,包含了数据...
**一、MyBatis缓存概念** MyBatis的缓存分为一级缓存和二级缓存。一级缓存是SqlSession级别的,同一个SqlSession内的相同SQL语句不会重复执行,而是直接从缓存中获取结果。然而,一级缓存存在生命周期问题,当...
开发者可以通过阅读和运行这个项目,来理解和学习如何在实际项目中实现MyBatis和Redis的二级缓存功能。 总结来说,"mybatis+redis实现二级缓存"项目展示了如何利用Redis的高性能缓存特性增强MyBatis的二级缓存,...
总之,Mybatis的一级缓存和二级缓存是提高数据访问效率的有效手段,但正确理解和使用它们至关重要,避免因不当配置引发的问题。通过深入理解缓存机制并结合实际业务需求,我们可以合理地利用缓存,提升系统的整体...