mybatis的缓存机制一级缓存二级缓存和刷新缓存和mybatis整合ehcache_第1页
mybatis的缓存机制一级缓存二级缓存和刷新缓存和mybatis整合ehcache_第2页
mybatis的缓存机制一级缓存二级缓存和刷新缓存和mybatis整合ehcache_第3页
mybatis的缓存机制一级缓存二级缓存和刷新缓存和mybatis整合ehcache_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache1查询缓存1.1什么是查询缓存mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。mybaits提供一级缓存,和二级缓存。一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到

2、缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存。二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession去操作数据库得到数据会存在二级缓存区域,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。二级缓存是多个SqlSession共享的,具作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中

3、传递参数也相同即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis默认没有开启二级缓存需要在setting全局参数中配置开启二级缓存。如果缓存中有数据就不用从数据库中获取,大大提高系统性能。1.2一级缓存1.2.1一级缓存工作原理下图是根据id查询用户的一级缓存图解第一次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,如果没有,从数据库查询用户信息。得到用户信息,将用户信息存储到一级缓存中。如果sqlSession去执行commit操作(执行插入、更新、删除),清空S

4、qlSession中的一级缓存, 这样做的目的为了让缓存中存储的是最新的信息, 避免脏读。第二次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,缓存中有,直接从缓存中获取用户信息。1.2.2一级缓存测试mybatis默认支持一级缓存,不需要在配置文件去配置。按照上边一级缓存原理步骤去测试。TestpublicvoidtestCache1()throwsExceptionSqlSessionsqlSession=sqlSessionFactory.openSession();/创建代理对象UserMapperuserMapper=sqlSession.getMapper(U

5、serMapper.class);/下边查询使用一个SqlSession第一次发起请求,查询id为1的用户Useruser1=userMapper.findUserByld(l);System.out.println(userl);/如果sqlSession去执行commit操作(执行插入、更新、删除),清空SqlSession中的一级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。更新user1的信息user1.setUsername(测试用户22);userMapper.updateUser(user1);执行commit操作去清空缓存sqlSmit();第二次发起请求,查询i

6、d为1的用户Useruser2=userMapper.findUserById(1);System.out.println(user2);sqlSession.close();1.2.3一级缓存应用正式开发,是将mybatis和spring进行整合开发,事务控制在service中。一个service方法中包括很多mapper方法调用。service开始执行时,开启事务,创建SqlSession对象第一次调用mapper的方法findUserById(1)第二次调用mapper的方法findUserById(1),从一级缓存中取数据/aop控制只要方法结束,sqlSession关闭sqlsess

7、ion关闭后就销毁数据结构,清空缓存Service结束sqlsession关闭如果是执行两次service调用查询相同的用户信息,不走一级缓存,因为Service方法结束,sqlSession就关闭,一级缓存就清空。1.3二级缓存1.3.1原理首先开启mybatis的二级缓存。sqlSessionl去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到二级缓存中。如果SqlSession3去执行相同mapper下sql,执行commit提交, 清空该mapper下的二级缓存区域的数据。sqlSession2去查询用户id为1的用户信息,去缓存中我是否存在数据,如果存在直接从缓存中取由数

8、据。二级缓存与一级缓存区别,二级缓存的范围更大,多个sqlSession可以共享一个UserMapper的二级缓存区域。数据类型仍然为HashMapUserMapper有一个二级缓存区域 (按namespace分,如果namespace相同贝U使用同一个相同的二级缓存区),其它mapper也有自己的二级缓存区域(按namespace分)。每个namespace的mapper都有一个二缓存区域,两个mapper的namespace如果相同,这两个mapper执行sql查询到数据将存在相同的二级缓存区域中。1.3.2开启二级缓存mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存。在核心配置文件SqlMapConfig.xml中加入<settingname=cacheEnabledvalue=true7><!-全局配置参数,需要时再设置-><settings><!-开启二级缓存默认值为true-&gt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论