`
bugyun
  • 浏览: 556242 次
社区版块
存档分类
最新评论

mybatis缓存的使用及理解(转)

 
阅读更多

转自: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缓存机制案例

    在使用Mybatis缓存时,需要注意以下几点: 1. 数据一致性:由于缓存的存在,可能会导致数据的延迟更新,因此在处理实时性要求高的业务时,需要谨慎使用缓存。 2. 缓存命中率:合理的缓存策略可以提高缓存的利用率,...

    深入理解MyBatis中的一级缓存与二级缓存

    "深入理解MyBatis中的一级缓存与二级缓存" MyBatis是一种流行的持久层框架,它提供了缓存机制来提高应用程序的性能。在MyBatis中,有两种类型的缓存:一级缓存和二级缓存。下面我们将深入了解MyBatis中的一级缓存和...

    Mybatis缓存测试示例

    Mybatis 是一款流行的Java持久层框架,它简化了数据库操作,通过XML或注解的方式将SQL与Java代码...通过这个测试示例,开发者不仅可以学习到Mybatis缓存的基本使用,还能了解到如何在实际项目中对其进行测试和调优。

    Mybatis缓存开源架构源码2021.pdf

    总的来说,《Mybatis缓存开源架构源码2021》这份文档很可能会涵盖 MyBatis 缓存体系的各个方面,包括一级缓存和二级缓存的使用、配置、源码解析以及实际开发中的注意事项。对于想深入了解 MyBatis 缓存机制的开发者...

    Mybatis系列教程Mybatis缓存共17页.pdf

    Mybatis 是一款流行的Java持久层框架,它简化了数据库操作,通过XML或注解的方式将SQL...本教程的17页内容将会详尽地讲解Mybatis缓存的各个方面,包括配置、使用示例以及最佳实践,帮助开发者更好地掌握这一关键特性。

    缓存处理-mybatis层

    首先,我们要理解MyBatis的缓存分为一级缓存和二级缓存。一级缓存是SqlSession级别的,也被称为本地缓存,它存储在SqlSession对象内部。当我们在同一个SqlSession内执行相同的SQL语句时,MyBatis会优先从一级缓存中...

    mybatis 缓存的简单配置

    至于"工具"标签,可能是指使用一些辅助工具来管理和查看MyBatis的缓存,比如通过日志监控、性能分析工具等,这些可以帮助我们更好地理解和调整缓存的性能。 在文件列表"mybatis-04"中,可能包含了MyBatis的配置文件...

    基于mybatis自定义缓存配置Redis

    首先,理解MyBatis的缓存机制。MyBatis提供了两级缓存:一级缓存是SqlSession级别的,存在于SqlSessionFactory内部,而二级缓存是全局的,可以在多个SqlSession之间共享。默认情况下,一级缓存是开启的,但二级缓存...

    mybatis-demo13-缓存.zip

    4. **在Mapper接口和XML中使用缓存**:在MyBatis的Mapper接口中,使用`@CacheNamespace`注解标记整个接口,以启用缓存。然后在具体的查询方法上使用`@CacheNamespaceRef`注解,指定使用哪个缓存区域。在对应的Mapper...

    mybatis一二级缓存

    MyBatis 是一款深受开发者喜爱的 Java 持久层框架,它简化了数据库操作,提供了 SQL 映射功能和对象关系映射。...通过 `mybatis-test` 相关的测试代码,开发者可以深入理解 MyBatis 缓存机制并优化其使用。

    mybatis二级缓存

    标题中的“mybatis二级缓存”指的是MyBatis框架中的一个重要特性,它是MyBatis缓存机制的一部分,用于提升数据库查询效率。MyBatis一级缓存是SqlSession级别的,而二级缓存则是在整个Mapper配置范围内的全局缓存,...

    mybatis一级缓存和二级缓存简单示例

    MyBatis 是一款优秀的持久层框架,它支持...理解并合理运用 MyBatis 的缓存机制,能显著提高应用程序的性能,减少对数据库的访问压力。在实际开发中,要根据项目需求和环境来调整缓存策略,确保系统的稳定性和高效性。

    【MyBatis学习笔记八】——MyBatis缓存.zip

    本篇笔记将深入探讨MyBatis的缓存机制,包括一级缓存和二级缓存的概念、工作原理、配置与使用。 一级缓存是SqlSession级别的缓存,每当执行一个SQL查询时,如果结果不在缓存中,MyBatis会将其放入一级缓存。当同一...

    mybatis二级缓存学习

    总结,MyBatis二级缓存是一项实用的性能优化技术,但使用时需注意其工作原理和潜在的问题,合理配置和管理才能发挥最大效能。通过理解和实践,我们可以更好地掌握这一工具,提高应用的运行效率。

    hibernate与mybatis一起使用取长补短

    6. **缓存策略**: Hibernate的二级缓存可以用于提高数据访问速度,而MyBatis可以通过插件实现自己的缓存机制,两者结合可以构建更高效的缓存体系。 7. **错误调试**: MyBatis的SQL日志记录功能可以帮助开发者快速...

    MyBatis缓存机制深度解剖[收集].pdf

    通过对MyBatis缓存机制的深入理解,开发者可以更有效地利用缓存提升应用性能,同时避免并发控制和数据一致性的问题。通过自定义缓存策略,还可以根据项目需求调整缓存的行为,比如使用更复杂的排除算法或调整缓存...

    MyBatis基本使用总结

    在使用MyBatis时,我们需要理解其核心组件和工作原理,以便更好地进行数据库操作。 一、MyBatis核心配置文件 MyBatis的核心配置文件通常命名为`mybatis-config.xml`,它是整个MyBatis系统的总配置文件,包含了数据...

    MyBatis3开启二级缓存

    **一、MyBatis缓存概念** MyBatis的缓存分为一级缓存和二级缓存。一级缓存是SqlSession级别的,同一个SqlSession内的相同SQL语句不会重复执行,而是直接从缓存中获取结果。然而,一级缓存存在生命周期问题,当...

    mybatis+redis实现二级缓存

    开发者可以通过阅读和运行这个项目,来理解和学习如何在实际项目中实现MyBatis和Redis的二级缓存功能。 总结来说,"mybatis+redis实现二级缓存"项目展示了如何利用Redis的高性能缓存特性增强MyBatis的二级缓存,...

    Mybatis的缓存1

    总之,Mybatis的一级缓存和二级缓存是提高数据访问效率的有效手段,但正确理解和使用它们至关重要,避免因不当配置引发的问题。通过深入理解缓存机制并结合实际业务需求,我们可以合理地利用缓存,提升系统的整体...

Global site tag (gtag.js) - Google Analytics