MyBatis的Cache实际意义不大

转载 2012年03月21日 15:05:48

转载的一篇文章。

出于新项目一定要求要用jsp,让我这个习惯写窗体应用程序的去搞web开发,让我好生为难。半路出家,遇到问题很多,转载些文章,自己顺便修改些,留备忘。

说意义不大是在于:
a、面对一定规模的数据量,内置的cache方式就派不上用场了;
b、对查询结果集做缓存并不是MyBatis框架擅长的,它专心做的应该是sql mapper。采用此框架的Application去构建缓存更合理,比如采用OSCache、Memcached啥的。


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

2、各个Mapper XML文件,默认是不采用cache。在配置文件加一行就可以支持cache:
 <cache />  就这个网上找了个java应用程序的例子,用的是<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>或者<cache type="org.mybatis.caches.ehcache.EhcacheCache"/> ,然后我把这个缓存功能也弄到自己的web中,老报错:

org.apache.jasper.JasperException: org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### The error may exist in yeah/person.xml
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.lang.RuntimeException: Error parsing Mapper XML. Cause: org.apache.ibatis.cache.CacheException: Could not instantiate cache implementation (class org.mybatis.caches.ehcache.EhcacheCache). Cause: java.lang.reflect.InvocationTargetException
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
一堆错误,底下还有。直接换成<cache />就ok了,在看到这篇文章说MyBatis的Cache意义不大,我看还是算了不折腾这个了,没那么多闲工夫。


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

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

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

MyBatis的缓存配置(Cache)

一、MyBatis的Cache配置 1、全局开关:默认是true,如果它配成false,其余各个Mapper XML文件配成支持cache也没用。 2、各个Mapper XML文件...
  • woshisap
  • woshisap
  • 2011年09月27日 12:57
  • 22878

MyBatis缓存机制学习笔记

与Hibernate一样,MyBatis 同样提供了一级缓存和二级缓存的支持。 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 ...
  • canot
  • canot
  • 2016年05月24日 16:58
  • 6225

《深入理解mybatis原理》 MyBatis的二级缓存的设计原理

MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。本文将全面分析MyBatis的二级缓存的设计原理。...

hibernate -----Could not instantiate cache implementation异常处理

 今天在使用Hibernate时,出现了Could not instantiate cache implementation的错误,我是在使用Hibernate tools时报的错误,应该运行时也会出...

Spring boot使用Redis集群替换mybatis二级缓存

pom.xml添加相关依赖 org.springframework.boot spring-boot-starter-parent 1.5.1.REL...

彻底搞清referrer和origin

在http协议中有这两个字段,之前一直隐隐约约的觉得是,一种标记请求来源的方法(的确是),但是更细致的对这两个字段的比较却没有一个清楚的认识。referrer到底是referer还是referrer,...
  • zdavb
  • zdavb
  • 2016年04月15日 13:51
  • 5655

华为LiteOS真相 噱头大于实际意义

origin: https://baijia.baidu.com/s?old_id=65489 摘要:华为在2015华为网络大会上,推出了一款物联网操作系统LiteOS,引起业内不少关注。到底这是一...

Redis集群~windows下搭建Sentinel环境及它对主从模式的实际意义

回到目录 关于redis-sentinel出现的原因 Redis集群的主从模式有个最大的弊端,就是当主master挂了之前,它的slave从服务器无法提升为主,而在redis-sentin...

在正文中提取有实际意义的数字

手动迁移原创博客,原文发表在http://www.cnblogs.com/paololiu/p/5594033.html 在百度上抓取了大量的乡镇信息,但都是大段大段的文字,并无法直...

名人演讲并没有实际意义、跟名人传一样

一、除了鼓舞人心并没有太多的意义。 二、如果没有具体的指导,那么不会有帮助。 没有必要凑热闹,没有必要走形式。 三、鼓舞人心并不能提高人的能力。 如果不知道学习什么,要么凭着一场热血,不过是摔得更惨而...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MyBatis的Cache实际意义不大
举报原因:
原因补充:

(最多只允许输入30个字)