首先,二级缓存默认不开启!

要配置 <setting name="cacheEnabled" value="true"/>

在MyBatis中:一级缓存会维护一个HashMap,key为hashcode+statementId+sql语句,Value为查询出来的结果集映射成的java对象。作用域是SqlSession

二级缓存是namespace级的,还需要在配置文件处配置缓存<cache/>

在配置了分布查询

  1. <select id="selectEmployees" resultMap="emps">
  2. select id,last_name,gender,descr,did from employee
  3. </select>
  4.  
  5. <resultMap type="com.atguigu.bean.Employee" id="emps">
  6. <id column="id" property="id"/>
  7. <result column="last_name" property="lastName"/>
  8. <result column="gender" property="gender"/>
  9. <result column="descr" property="descr"/>
  10.  
  11. <association property="dept" select="com.atguigu.mapper.DepartmentMapper.selectDepartmentById"
  12. column="{id=did}"></association>
  13. </resultMap>

和延时加载后

  1. <setting name="lazyLoadingEnabled" value="true"/>
  2. <setting name="aggressiveLazyLoading" value="false"/>

此时刷新查询结果页面会报错

  1. 1 type Exception report
  2. 2
  3. 3 message javax.el.ELException: Error reading 'dept' on type com.atguigu.bean.Employee_$$_jvst6ff_0
  4. 4
  5. 5 description The server encountered an internal error that prevented it from fulfilling this request.
  6. 6
  7. 7 exception
  8. 8
  9. 9 org.apache.jasper.JasperException: javax.el.ELException: Error reading 'dept' on type com.atguigu.bean.Employee_$$_jvst6ff_0
  10. 10 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:561)
  11. 11 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
  12. 12 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
  13. 13 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
  14. 14 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
  15. 15 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  16. 16 org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209)
  17. 17 org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:266)
  18. 18 org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1225)
  19. 19 org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012)
  20. 20 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
  21. 21 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
  22. 22 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931)
  23. 23 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822)
  24. 24 javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
  25. 25 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)
  26. 26 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
  27. 27 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  28. 28 org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
  29. 29 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
  30. 30 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
  31. 31 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
  32. 32 root cause
  33. 33
  34. 34 javax.el.ELException: Error reading 'dept' on type com.atguigu.bean.Employee_$$_jvst6ff_0
  35. 35 javax.el.BeanELResolver.getValue(BeanELResolver.java:110)
  36. 36 org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
  37. 37 org.apache.el.parser.AstValue.getValue(AstValue.java:184)
  38. 38 org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
  39. 39 org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:950)
  40. 40 org.apache.jsp.pages.list_jsp._jspx_meth_c_005fforEach_005f0(list_jsp.java:212)
  41. 41 org.apache.jsp.pages.list_jsp._jspService(list_jsp.java:124)
  42. 42 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
  43. 43 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
  44. 44 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
  45. 45 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
  46. 46 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
  47. 47 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
  48. 48 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  49. 49 org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209)
  50. 50 org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:266)
  51. 51 org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1225)
  52. 52 org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012)
  53. 53 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
  54. 54 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
  55. 55 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931)
  56. 56 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822)
  57. 57 javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
  58. 58 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)
  59. 59 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
  60. 60 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  61. 61 org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
  62. 62 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
  63. 63 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
  64. 64 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
  65. 65 root cause
  66. 66
  67. 67 org.apache.ibatis.executor.ExecutorException: Cannot get Configuration as configuration factory was not set.
  68. 68 org.apache.ibatis.executor.loader.ResultLoaderMap$LoadPair.getConfiguration(ResultLoaderMap.java:220)
  69. 69 org.apache.ibatis.executor.loader.ResultLoaderMap$LoadPair.load(ResultLoaderMap.java:191)
  70. 70 org.apache.ibatis.executor.loader.AbstractEnhancedDeserializationProxy.invoke(AbstractEnhancedDeserializationProxy.java:78)
  71. 71 org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedDeserializationProxyImpl.invoke(JavassistProxyFactory.java:186)
  72. 72 com.atguigu.bean.Employee_$$_jvst6ff_0.getDept(Employee_$$_jvst6ff_0.java)
  73. 73 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  74. 74 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  75. 75 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  76. 76 java.lang.reflect.Method.invoke(Method.java:498)
  77. 77 javax.el.BeanELResolver.getValue(BeanELResolver.java:99)
  78. 78 org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
  79. 79 org.apache.el.parser.AstValue.getValue(AstValue.java:184)
  80. 80 org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
  81. 81 org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:950)
  82. 82 org.apache.jsp.pages.list_jsp._jspx_meth_c_005fforEach_005f0(list_jsp.java:212)
  83. 83 org.apache.jsp.pages.list_jsp._jspService(list_jsp.java:124)
  84. 84 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
  85. 85 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
  86. 86 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
  87. 87 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
  88. 88 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
  89. 89 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
  90. 90 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  91. 91 org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209)
  92. 92 org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:266)
  93. 93 org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1225)
  94. 94 org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012)
  95. 95 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
  96. 96 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
  97. 97 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931)
  98. 98 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822)
  99. 99 javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
  100. 100 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)
  101. 101 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
  102. 102 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  103. 103 org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
  104. 104 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
  105. 105 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
  106. 106 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
  107. 107 note The full stack trace of the root cause is available in the Apache Tomcat/7.0.79 logs.

错误页面

这可能是由于第一次查询将结果保存在了二级缓存中,在第二次查询时,由于设置了延时加载,在缓存中只查到了Employee对应的属性,但对于第二步却无法一次性而出现问题。

解决办法是关闭二级缓存。

(问别人的时候还以为二级缓存默认开启真鸡儿丢人)

MyBatis中二级缓存和延时加载同时开启的问题的更多相关文章

  1. Android批量图片加载经典系列——采用二级缓存、异步加载网络图片

    一.问题描述 Android应用中经常涉及从网络中加载大量图片,为提升加载速度和效率,减少网络流量都会采用二级缓存和异步加载机制,所谓二级缓存就是通过先从内存中获取.再从文件中获取,最后才会访问网络. ...

  2. MyBatis入门(五)---延时加载、缓存

    一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...

  3. Hibernate中的一级缓存、二级缓存和懒加载(转)

    1.为什么使用缓存 hibernate使用缓存减少对数据库的访问次数,从而提升hibernate的执行效率.hibernate中有两种类型的缓存:一级缓存和二级缓存. 2.一级缓存 Hibenate中 ...

  4. Hibernate中的一级缓存、二级缓存和懒加载

    1.为什么使用缓存 hibernate使用缓存减少对数据库的访问次数,从而提升hibernate的执行效率.hibernate中有两种类型的缓存:一级缓存和二级缓存. 2.一级缓存 Hibenate中 ...

  5. SSM-MyBatis-18:Mybatis中二级缓存和第三方Ehcache配置

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 二级缓存 Mybatis中,默认二级缓存是开启的.可以关闭. 一级缓存开启的.可以被卸载吗?不可以的.一级缓存 ...

  6. mybatis中二级缓存整合ehcache实现分布式缓存

    mybatis自带二级缓存,但是这个缓存是单服务器工作,无法实现分布式缓存.那么什么是分布式缓存呢?假设现在有两个服务器1和2,用户访问的时候访问了1服务器,查询后的缓存就会放在1服务器上,假设现在有 ...

  7. Mybatis的二级缓存配置

    一个项目中肯定会存在很多共用的查询数据,对于这一部分的数据,没必要每一个用户访问时都去查询数据库,因此配置二级缓存将是非常必要的.  Mybatis的二级缓存配置相当容易,要开启二级缓存,只需要在你的 ...

  8. 一段实现页面上的图片延时加载的js

    大家如果使用firebug去查看的话就会发现,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对于比较 ...

  9. js实现网页图片延时加载的原理和代码 提高网站打开速度

    有时我们看到一些大型网站,页面如果有很多图片的时候,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对 ...

随机推荐

  1. 常用编程软件站点、镜像站、科技类 PDF

    0. 图书站点 Library Genesis 1. Python 包的下载 https://pypi.python.org/pypi/ 在域名的最后加上任何你想下载的第三方的包,比如 theano: ...

  2. WPF--动态添加控件、访问控件

    //WPF窗口采用默认的Grid布局控件,其“Name”值为“grid1”,在“grid1”中添加三个Button按钮.动态添加控件并访问这些控件的代码如下: private void button1 ...

  3. 电讯“情趣me”为什么命途多舛?

        古人有句话叫做战争"鼓作气,再而衰,三而竭",意思是打仗必须"一气呵成".才干发挥最大实力,取得最好的战绩.所谓商场如战场,经商也是如此,近期,中国电信 ...

  4. 用C++写android程序(包含界面+发短信)

    首先为什么要用C++写android程序呢?主要是因为java写的android程序太容易被发编译,相对于java编译后的dex文件,底层的native so更加不容易被反编译,所以为了安全起见,可以 ...

  5. AI2XAML's Bug

    原文:AI2XAML's Bug My picture is like this: I use Adobe Illustator CS to draw the outline of that, I s ...

  6. WCF寄宿与IIS里时遇到的问题

    [问题总结]WCF寄宿与IIS里时遇到的问题 最近在公司做了一个小的视频处理网站,由于视频处理,网站在不同的服务器上,所以处理视频的时候得在网站服务器上通过wcf请求视频处理服务器处理视频,并将结果返 ...

  7. 倒计时的CountDownTimer

    直接看这里吧,我仅仅是搬运工.  定时运行在一段时候后停止的倒计时,在倒计时运行过程中会在固定间隔时间得到通知(译者:触发onTick方法),以下的样例显示在一个文本框中显示一个30s倒计时: , 1 ...

  8. Notepad++ 自定义关键字

    Notepad++是一款輕便好用的編輯器,但可能有些語言的關鍵字不全,比方SQL中,默認關鍵字沒有Merge. 怎样給Notepad++中的語言添加關鍵字,而不是大動干戈自定義一個語言? 步驟: Se ...

  9. WPF x:static的使用

    <Window x:Class="XamlTest.Window1"        xmlns="http://schemas.microsoft.com/winf ...

  10. 通通WPF随笔(2)——自己制作轻量级asp.net网站服务

    原文:通通WPF随笔(2)--自己制作轻量级asp.net网站服务 大学玩asp.net时就发现VS在Debug时会起一个web服务,这东西也太神奇了服务起得这么快,而相对于IIS又这么渺小. 前几个 ...