看懂这篇文章,你就懂了Mybatis的二级缓存

缓存的概述和分类概述缓存就是一块内存空间.保存临时数据为什么使用缓存将数据源(数据库或者文件)中的数据读取出来存放到缓存中,再次获取的时候 ,直接从缓存中获取,可以减少和数据库交互的次数,这样可以提升程序的性能!缓存的适用情况适用于缓存的:经常查询但不经常修改的(eg: 省市,类别数据),数据的正确与否对最终结果影响不大的不适用缓存的:经常改变的数据 , 敏感数据(例如:股市的牌价,银行的汇率,银行卡里面的钱)等等MyBatis缓存类别一级缓存:它是sqlSession对象的缓存,自带的(不需要配置)不可卸载的(不想使用还不行). 一级缓存的生命周期与sqlSession一致。二级缓存:它是SqlSessionFactory的缓存。只要是同一个SqlSessionFactory创建的SqlSession就共享二级缓存的内容,并且可以操作二级缓存。二级缓存如果要使用的话,需要我们自己手动开启(需要配置的)。二级缓存的使用1.在 mybatis的核心配置文件中开启二级缓存 <!–因为 cacheEnabled 的取值默认就为 true,所以这一步可以省略不配置。为 true 代表开启二级缓存;为 false 代表不开启二级缓存。 –> <settings> <setting name=“cacheEnabled” value=“true”/> </settings>2.在Dao映射文件中配置使用二级缓存<?xml version=”1.0″ encoding=”UTF-8″ ?> <!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN” “http://mybatis.org/dtd/mybatis-3-mapper.dtd”> <mapper namespace=“com.itheima.dao.UserDao”> <!–配置二级缓存–> <cache/> <select id=“findAll” resultType=“user”> select * from t_user </select> <delete id=“deleteById” parameterType=“int”> delete from t_user where uid=#{id} </delete> </mapper>3.要进行二级缓存的Pojo类必须实现Serializable接口public class User implements Serializable { private int uid; private String username; private String sex; private Date birthday; private String address; // 省略setter,getter,构造…等方法 }4.测试使用二级缓存测试代码@TestpublicvoidtestFindAll() throwsException

{

// 1.加载mybatis核心配置文件InputStreamis=Resources.getResourceAsStream(“SqlMapConfig.xml”

);

// 2.创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuildersqlSessionFactoryBuilder=newSqlSessionFactoryBuilder

();

// 3.构建SqlSessionFactory对象SqlSessionFactorysqlSessionFactory=sqlSessionFactoryBuilder.build(is

);

// 4.获取SqlSession对象SqlSessionsqlSession=sqlSessionFactory.openSession

();

// 5.获得dao接口的代理对象UserDaouserDao=sqlSession.getMapper(UserDao.class

);

// 6.执行sql语句,得到结果List<User>list=userDao.findAll

();

for (Useruser : list

) {

System.out.println(“user = “+user

);

}

sqlSession.close();//清除一级缓存System.out.println(“分割线———————————-“

);

SqlSessionsqlSession2=sqlSessionFactory.openSession

();

UserDaouserDao2=sqlSession2.getMapper(UserDao.class

);

List<User>userList2=userDao2.findAll

();

for (Useruser : userList2

) {

System.out.println(user

);

}

// 7.释放资源sqlSession2.close

();

}
测试结果:
看懂这篇文章,你就懂了Mybatis的二级缓存
经过上面的测试,我们发现执行了两次查询,并且在执行第一次查询后,我们关闭了一级缓存,再去执行第二次查询时,我们发现并没有对数据库发出 sql 语句,所以此时的数据就只能是来自于我们所说的二级缓存。5.测试关闭二级缓存测试代码@TestpublicvoidtestFindAll() throwsException

{

// 1.加载mybatis核心配置文件InputStreamis=Resources.getResourceAsStream(“SqlMapConfig.xml”

);

// 2.创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuildersqlSessionFactoryBuilder=newSqlSessionFactoryBuilder

();

// 3.构建SqlSessionFactory对象SqlSessionFactorysqlSessionFactory=sqlSessionFactoryBuilder.build(is

);

// 4.获取SqlSession对象SqlSessionsqlSession=sqlSessionFactory.openSession

();

// 5.获得dao接口的代理对象UserDaouserDao=sqlSession.getMapper(UserDao.class

);

// 6.执行sql语句,得到结果List<User>list=userDao.findAll

();

for (Useruser : list

) {

System.out.println(“user = “+user

);

}

sqlSession.close();//清除一级缓存System.out.println(“分割线———————————-“

);

SqlSessionsqlSession2=sqlSessionFactory.openSession

();

UserDaouserDao2=sqlSession2.getMapper(UserDao.class

);

userDao2.deleteById(5);// 关闭二级缓存List<User>userList2=userDao2.findAll

();

for (Useruser : userList2

) {

System.out.println(user

);

}

// 7.释放资源sqlSession2.close

();

}
测试结果
看懂这篇文章,你就懂了Mybatis的二级缓存
经过上面的测试,我们发现执行了两次查询,并且在执行第一次查询后,我们关闭了一级缓存,关闭二级缓存,再去执行第二次查询时,我们发现对数据库发出了 sql 语句,所以此时的数据是来自数据库,不是缓存。总结二级缓存的使用小结:1.开启二级缓存2.dao映射文件配置二级缓存3.要进行二级缓存的Pojo类必须实现Serializable接口4.使用二级缓存:它是SqlSessionFactory的缓存。只要是同一个SqlSessionFactory创建的SqlSession就共享二级缓存的内容5.关闭二级缓存

免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:看懂这篇文章,你就懂了Mybatis的二级缓存 https://www.dachanpin.com/a/cyfx/11427.html

(0)
上一篇 2023-05-12 03:18:05
下一篇 2023-05-12 03:19:11

相关推荐

  • 通路易招告诉你创业中坚持和放弃如何选择

    只求眼前利益的创业意识该放弃,求得发展大局应坚持。 纵观如今已经在B2C获得成功的电商发展经历可以看出,那种只看到眼前的蝇头小利而不顾未来发展大局的是应被放弃的。正如如今通路易招,在合作发展中一直秉承“不求眼前利益,只求和客户的合作共赢”,这种时刻想着为客户寻求回报的经营理念无疑是具有科学性的,是有很广的市场发展前景的。 坚持特色发展,放弃盲目跟风。 对于如…

    创业分享 2023-06-03
    144
  • 成功创业经验分享,硅藻泥创业必看

    二、选择顺应趋势,有发展潜力的品牌 天然居作为一个有持续发展能力的品牌绝不会跟在别人背后亦步亦趋。天然居走差异化道路与别的品牌形成市场区隔,让竞争对手无从跟随,最终拥有更强的生命力,更高的市场价值! 硅藻泥行业虽然发展了将近十年,但行业为消费者熟知的知名品牌才能称之为渠道品牌。天然居硅藻泥被评为硅藻泥行业十大品牌,品牌实力强势。为加盟商的支持力度会更大,会更…

    创业分享 2023-06-02
    154
  • 瑞昌:“数”说2019年就业创业服务“满堂彩” 中国劳动保障新闻

    瑞昌:“数”说2019年就业创业服务“满堂彩” 来源:中国劳动保障新闻网 作者:洪秋荣 日期:2020-01-02   近日,记者从江西省瑞昌市就业局了解到:2019年各项工作全部超额完成目标任务。完成就业培训6969人,完成率290%;发放创业扶持贷款2.8亿,完成率157%;城镇新增就业人数6459人,完成率144%;安置427名贫困人员就业,完成率11…

    创业分享 2023-05-12
    188
  • 马云,马化腾等,他们创业初期有着怎么样的经历?

    百度和谷歌看上去发展的一路顺利,但前提是李彦宏和佩奇、布林不仅有罕见的才智并且在搜索技术上有非常深厚的积淀。 创业也是如此,观众往往看到创业者的成功,却看不到华丽一跃而看不到背后令人煎熬的助跑,创业成功的大佬们同样是经历了千万磨难,才有成功的荣耀。 马化腾:在一家叫润迅的小公司默默打工多年才创办腾讯,在企鹅成长过程中也感受一路颠簸,多次寻求脱手未果才不得不坚…

    创业分享 2023-05-16
    245
  • 创新创业贯穿教学始终 学生还没毕业就月入过万

       浙江在线杭州5月6日讯(浙江在线记者 吴俏婧 通讯员 戴剑锋)众所周知,温州民营经济发达,温州还将“敢为人先的温州人精神”纳入中职创新创业教育全过程。薛昭表示,学生创业创新意识与技术技能的提高,是各职校教学质量提升的表现,也成为打开新局面的一把“金钥匙”。学校又是如何在这方面发力,为学生创造平台的呢?   据介绍,目前,温州市有70%以上职校都设立了创…

    2023-05-23
    125

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

工作时间:周一至周五,9:30-16:30,节假日休息