电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存

瀏覽:5日期:2023-04-05 15:59:24

前言

現在的JAVA行業,貌似已經是SpringBoot + SpringCloud 的天下了,早期的SSH,SSM框架已經老去,與SpringBoot相結合的JPA框架雖然省去了很多的增刪改查sql,但是比較笨拙,在面對一些復雜多變的邏輯時常常力不從心,而相對應的Mybatis由于其高度的靈活性受到廣大JAVA攻城獅的歡迎。之前整合過了springboot+mybatis,前幾天看到一個面試的問一個問題,Mybatis的一級緩存,二級緩存。我想這個應該也是一個重點吧,所以今天決定來詳細解讀一下神秘的一二級緩存。

一級緩存是SqlSession級別的緩存。在操作數據庫時需要構造sqlSession對象,在對象中有一個數據結構(HashMap)用于存儲緩存數據。不同的sqlSession之間的緩存數據區域(HashMap)是互相不影響的。 一級緩存是默認開啟的不用配置。 二級緩存是mapper級別的緩存,多個SqlSession去操作同一個Mapper的sql語句,多個SqlSession可以共用二級緩存,二級緩存是跨SqlSession的。二級緩存的開啟(實體類必須序列化),然后在配置文件里面配置。

MyBatis-plus 配置要點核心要點1

mybatis-plus 在springboot 中的核心配置如下

mybatis-plus.configuration.cache-enabled=truemybatis-plus.mapper-locations=classpath*:/mapper/*.xmlmybatis-plus.type-aliases-package=com.sch.app.mybatis.entitylogging.level.com.sch.app.mybatis.mapper= debug

所需依賴 除了基本的springboot依賴外,還有

核心要點2

<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

核心要點3

mybatis 語句生成 generatorConfig.xml 用它一步生成需要的基本實體類和接口以及mapper文件(resouses目錄下)

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE generatorConfiguration PUBLIC '-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN' 'http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd'><generatorConfiguration> <!-- <properties resource='mybatis.properties' /> --> <classPathEntry location='D:AJavamysql-connector-java-8.0.16.jar' /> <context targetRuntime='MyBatis3'> <plugin type='org.mybatis.generator.plugins.SerializablePlugin'></plugin> <jdbcConnection connectionURL='jdbc:mysql://localhost:3306/alexshi?serverTimezone=GMT%2B8' driverClass='com.mysql.cj.jdbc.Driver' password='1234' userId='root' > <property name='nullCatalogMeansCurrent' value='true'/> </jdbcConnection> <javaTypeResolver> <property name='forceBigDecimals' value='false' /> </javaTypeResolver> <javaModelGenerator targetPackage='com.sch.app.mybatis.entity' targetProject='SpringbootMybatissrcmainjava'> <property name='enableSubPackages' value='true'/> <!-- 從數據庫返回的值被清理前后的空格 --> <property name='trimStrings' value='true' /> </javaModelGenerator> <sqlMapGenerator targetPackage='mapper' targetProject='SpringbootMybatissrcmainresources'> <property name='enableSubPackages' value='true'/> </sqlMapGenerator> <javaClientGenerator type='XMLMAPPER' targetPackage='com.sch.app.mybatis.mapper' targetProject='SpringbootMybatissrcmainjava'> <property name='enableSubPackages' value='true'/> </javaClientGenerator> <!--數據庫表--> <table schema='' tableName='d_dictionary'></table> <table schema='' tableName='d_dictionary_type'></table> <table schema='' tableName='c_resource'></table> <table schema='' tableName='c_role'></table> <table schema='' tableName='c_role_resource'></table> <table schema='' tableName='c_user_online'></table> <table schema='' tableName='c_user'></table> <table schema='' tableName='c_user_role'></table> <table schema='' tableName='test'></table> </context></generatorConfiguration>

SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存

這個 Run Mybatis Generator 可以在eclipse 的插件市場下的

點擊執行后生成以下內容

SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存

SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存

Mybatis-plus 一級緩存的測試

首先一定要開啟日志 方便查看效果

logging.level.com.sch.app.mybatis.mapper= debug

com.sch.app.mybatis.mapper 也就是 mapper接口的目錄

SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存

測試代碼1

@Autowiredprivate SqlSessionFactory sqlSessionFactory; @RequestMapping(value = '/testMybatis') @ResponseBody public void testMybatis(){ SqlSession sqlSession = sqlSessionFactory.openSession(); TestMapper testMapper = sqlSession.getMapper(TestMapper.class); for (int i = 0; i < 3; i++) { Test selectByPrimaryKey = testMapper.selectByPrimaryKey(5); log.info('結果:'+ selectByPrimaryKey.getUsername()); }

SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存

結果是

SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存

可以看出,只搜索了一次,第二三次都沒有sql打印

測試代碼2

@RequestMapping(value = '/testMybatis') @ResponseBody public void testMybatis(){ SqlSession sqlSession = sqlSessionFactory.openSession(); TestMapper testMapper = sqlSession.getMapper(TestMapper.class); for (int i = 0; i < 3; i++) { Test selectByPrimaryKey = testMapper.selectByPrimaryKey(5); log.info('結果:'+ selectByPrimaryKey.getUsername()); if (i == 2) { selectByPrimaryKey.setUsername('劉惜君的妹妹'); testMapper.updateByPrimaryKey(selectByPrimaryKey); Test selectByPrimaryKey2 = testMapper.selectByPrimaryKey(5); log.info('更新后的用戶名:'+ selectByPrimaryKey2.getUsername());} }

打印結果:

SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存

可見,第一次我加入了更新的代碼后再次查詢的時候,就又執行了sql語句,說明當執行插入、更新、刪除,會清空SqlSession中的一級緩存。只有查詢的操作,一級緩存才不會被清除。

Mybatis-plus二級緩存測試

二級緩存的開啟除了在配置文件中打開開關 還要在mapper對應開啟

SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存

測試代碼1

@RequestMapping(value = '/testMybatis2') @ResponseBody public void testMybatis2(){ SqlSession openSession1 = sqlSessionFactory.openSession(); SqlSession openSession2 = sqlSessionFactory.openSession(); TestMapper mapper1 = openSession1.getMapper(TestMapper.class); TestMapper mapper2 = openSession2.getMapper(TestMapper.class); Test selectByPrimaryKey = mapper1.selectByPrimaryKey(5); System.out.println(selectByPrimaryKey.getUsername()); openSession1.close(); Test selectByPrimaryKey2 = mapper2.selectByPrimaryKey(5); System.out.println(selectByPrimaryKey2.getUsername()); openSession2.close(); }

測試結果

SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存

由測試結果可知,上述代碼第一次查 mapper1.selectByPrimaryKey(5) 的時候執行了sql,然后關閉了第一個session 第二次 用別的sqlseeison 去查沒有調用sql,說明了二級換粗和sqlseesion 無關,之和mapper有關。

測試代碼2

@RequestMapping(value = '/testMybatis3') @ResponseBody public void testMybatis3(){ SqlSession openSession1 = sqlSessionFactory.openSession(); SqlSession openSession2 = sqlSessionFactory.openSession(); SqlSession openSession3 = sqlSessionFactory.openSession(); TestMapper mapper1 = openSession1.getMapper(TestMapper.class); TestMapper mapper2 = openSession2.getMapper(TestMapper.class); TestMapper mapper3 = openSession3.getMapper(TestMapper.class); Test selectByPrimaryKey = mapper1.selectByPrimaryKey(5); System.out.println(selectByPrimaryKey.getUsername()); openSession1.close(); selectByPrimaryKey.setUsername('劉惜君的姐姐'); mapper2.updateByPrimaryKey(selectByPrimaryKey); openSession2.commit(); Test selectByPrimaryKey3 = mapper3.selectByPrimaryKey(5); System.out.println(selectByPrimaryKey3.getUsername()); openSession3.close(); }

打印結果

SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存

由此可知,做了更新mapper2.updateByPrimaryKey(selectByPrimaryKey); 之后, 二級緩存才被清空。特性和一級緩存很類似。

初次之外,我們可以通過userCache是來設置具體的語句是否禁用二級緩存

SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存

重新執行 http://localhost:8080/testMybatis2 后的打印結果

SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存

可見 selectByPrimaryKey 這個查詢禁止二級緩存后,兩次都從數據庫里面查了。

小結

一級緩存是默認開始的,屬于會話級別,一個會話做多次做相同查詢會開啟,如果對查詢的數據進行更新,刪除等操作時,再次查詢會從數據庫里查而不用一級緩存。 二級緩存開啟最重要,請記住三點,1.配置文件開啟mybatis-plus.configuration.cache-enabled=true,2.對應mapper文件開啟 3.對應實體類實現Serializable 接口。如果要對某一個sql語句禁用二級緩存,則需要在具體的xml 的sql語句定義處加上 useCache=“false” 。另外記住它和會話無關,和 xml 的 namespace 即具體的mapper 有關。 在mapper的同一個namespace中,如果有其它insert、update、delete操作數據后需要刷新緩存,如果不執行刷新緩存會出現臟讀。 設置statement配置中的flushCache=“true” 屬性,可以實現二級緩存的刷新,false則可能出現臟讀。openSession.clearCache() 可以實現對一級緩存的刷新。

到此這篇關于SpringBoot + Mybatis-plus實戰之Mybatis-plus的一級緩存、二級緩存的文章就介紹到這了,更多相關Mybatis-plus一級緩存、二級緩存內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 新疆十佳旅行社_新疆旅游报价_新疆自驾跟团游-新疆中西部国际旅行社 | 深圳诚暄fpc首页-柔性线路板,fpc柔性线路板打样生产厂家 | 阻燃剂-氢氧化镁-氢氧化铝-沥青阻燃剂-合肥皖燃新材料 | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | 台湾HIWIN上银直线模组|导轨滑块|TBI滚珠丝杆丝杠-深圳汉工 | 专业甜品培训学校_广东糖水培训_奶茶培训_特色小吃培训_广州烘趣甜品培训机构 | 合肥活动房_安徽活动板房_集成打包箱房厂家-安徽玉强钢结构集成房屋有限公司 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 真空包装机-诸城市坤泰食品机械有限公司 | 欧景装饰设计工程有限公司-无锡欧景装饰官网 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | 山东齐鲁漆业有限公司【官网】-工业漆专业生产厂家 | 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 | 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 东莞精密模具加工,精密连接器模具零件,自動機零件,冶工具加工-益久精密 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 气动隔膜泵厂家-温州永嘉定远泵阀有限公司| 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 美国查特CHART MVE液氮罐_查特杜瓦瓶_制造全球品质液氮罐 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 红外光谱仪维修_二手红外光谱仪_红外压片机_红外附件-天津博精仪器 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 电动打包机_气动打包机_钢带捆扎机_废纸打包机_手动捆扎机 | 爱科技iMobile-专业的科技资讯信息分享网站 | 上海新光明泵业制造有限公司-电动隔膜泵,气动隔膜泵,卧式|立式离心泵厂家 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | 常州企业采购平台_常州MRO采购公司_常州米孚机电设备有限公司 | 防爆鼓风机-全风-宏丰鼓风机-上海梁瑾机电设备有限公司 | 博莱特空压机|博莱特-阿特拉斯独资空压机品牌核心代理商 | led太阳能路灯厂家价格_风光互补庭院灯_农村市政工程路灯-中山华可路灯品牌 | 管家婆-管家婆软件-管家婆辉煌-管家婆进销存-管家婆工贸ERP | 气密性检测仪_气密性检测设备_防水测试仪_密封测试仪-岳信仪器 | 长沙网站建设制作「网站优化推广」-网页设计公司-速马科技官网 | 企业微信scrm管理系统_客户关系管理平台_私域流量运营工具_CRM、ERP、OA软件-腾辉网络 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | 法兰连接型电磁流量计-蒸汽孔板节流装置流量计-北京凯安达仪器仪表有限公司 | 西安文都考研官网_西安考研辅导班_考研培训机构_西安在职考研培训 | 机床主轴维修|刀塔维修|C轴维修-常州翔高精密机械有限公司 | 中天寰创-内蒙古钢结构厂家|门式刚架|钢结构桁架|钢结构框架|包头钢结构煤棚 |