日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:30日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
一区二区精品伦理...| 久久精品播放| 亚洲一区二区毛片| 不卡在线一区二区| 不卡在线一区| 国产精品毛片| 蜜桃视频第一区免费观看| 在线综合欧美| 亚洲一区二区三区在线免费| 99在线观看免费视频精品观看| 一区二区视频欧美| 水蜜桃久久夜色精品一区的特点| 久久福利毛片| 日本在线视频一区二区| 少妇高潮一区二区三区99| 日本不卡不码高清免费观看 | 精品中国亚洲| 精品久久影院| 国产99亚洲| 三级亚洲高清视频| 日本一区二区三区视频在线看| 欧美天堂一区| 四虎成人av| 亚洲精品一区二区在线看| 羞羞答答国产精品www一本| 亚洲精品乱码久久久久久蜜桃麻豆 | 一区二区三区四区在线看| 欧美~级网站不卡| 日韩精品视频中文字幕| 美女尤物国产一区| 久久精品青草| 亚洲开心激情| 日本午夜精品一区二区三区电影| 久久狠狠亚洲综合| 水蜜桃精品av一区二区| 999在线观看精品免费不卡网站| 中文一区一区三区免费在线观| 国产丝袜一区| | 久久不见久久见中文字幕免费 | 国产麻豆一区| 亚洲天堂资源| 国产亚洲综合精品| 国产精品magnet| 国产精品97| 国产一卡不卡| 欧美日韩一二三四| 91成人精品观看| 日韩精品诱惑一区?区三区| 亚洲综合精品| 欧美精品国产白浆久久久久| 在线精品亚洲欧美日韩国产| 麻豆91精品| 精品日产乱码久久久久久仙踪林| 中文日韩在线| 精品免费视频| 亚洲有吗中文字幕| 国产一区二区三区四区二区| 在线一区视频| 国产成人a视频高清在线观看| 国产亚洲午夜| 超碰在线99| 亚洲精品一二三**| 中文字幕在线官网| 丝袜美腿亚洲一区| 久久影院午夜精品| 亚欧洲精品视频在线观看| 日韩免费av| 国产乱人伦精品一区| 亚洲精品1区2区| 高清一区二区三区av| 三级欧美韩日大片在线看| 天堂中文在线播放| 日韩午夜视频在线| 欧美福利专区| 色综合狠狠操| 亚洲精品九九| 欧美成人精品| 麻豆网站免费在线观看| 欧美日韩18| 久久午夜精品| 久久久精品久久久久久96| 国产精品黄色| 日本不卡视频一二三区| 亚洲永久字幕| 久久中文字幕二区| www在线观看黄色| 国产精品一区二区三区www| 伊人久久婷婷| 日韩国产欧美| 国产成人77亚洲精品www| 欧美日韩18| 亚洲精品看片| 亚洲在线成人| 午夜精品一区二区三区国产| 97欧美在线视频| 久久亚洲精品中文字幕| 91精品视频一区二区| 久久午夜视频| 亚洲自拍另类| 黄色日韩在线| 悠悠资源网久久精品| 亚洲高清二区| 欧美少妇精品| 久久精品人人| 精品亚洲二区| 精品久久福利| 精品免费av一区二区三区| 老司机免费视频一区二区三区| 日本午夜精品视频在线观看| 亚洲一区二区免费看| 亚洲综合电影一区二区三区| 欧美 日韩 国产一区二区在线视频 | 成人台湾亚洲精品一区二区| 日韩超碰人人爽人人做人人添| 久久亚洲欧美| 亚洲一区亚洲| 久久国产精品99国产| 麻豆9191精品国产| 久久亚洲风情| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产一级久久| 免费看黄色91| 亚洲青青久久| 日本91福利区| 国产精品第一国产精品| 日韩三级视频| 欧美日本不卡高清| 麻豆久久一区二区| 精品亚洲a∨一区二区三区18| 免费在线亚洲欧美| 国产一区二区三区四区五区 | av亚洲一区二区三区| 欧美三区四区| 日韩精品首页| 在线国产一区二区| 在线综合亚洲| 蜜臀久久99精品久久久久久9 | 国产精品久久久久毛片大屁完整版| 国产精品白丝久久av网站 | 国产精品啊v在线| 精品一区91| 99精品综合| 最新亚洲一区| 日本精品在线播放| 麻豆一区二区在线| av资源亚洲| 精品一区亚洲| 视频一区二区中文字幕| 日韩影院免费视频| 久久激情五月激情| 欧美国产偷国产精品三区| 久久影视一区| 中文字幕一区二区三区四区久久| 日本va欧美va精品| 国产精品极品国产中出| 成人亚洲一区| 欧美日韩精品一本二本三本| 亚洲免费专区| 久久中文字幕一区二区| 亚洲不卡av不卡一区二区| 爽好久久久欧美精品| 国产精品一区二区三区美女 | 欧美黄页在线免费观看 | 欧美一区二区三区久久| 久久免费视频66| 久久精品免费一区二区三区| 蜜臀av亚洲一区中文字幕| 国产精品115| 亚洲二区视频| 日韩免费精品| 日韩不卡免费高清视频| 国产精品三上| 国产日韩欧美在线播放不卡| 成人va天堂| 日本在线成人| 欧美三区四区| 日韩高清一区二区| 91精品一区国产高清在线gif| 亚洲人成亚洲精品| 日韩精品诱惑一区?区三区| 亚州av日韩av| 精精国产xxxx视频在线播放| 四虎国产精品免费久久| 国产精品sss在线观看av| 不卡中文字幕| 国产精品亚洲综合在线观看| 日韩欧美少妇| 国产无遮挡裸体免费久久| 蜜臀国产一区| 蜜臀久久99精品久久久久宅男| 国产欧美一级| 黄色不卡一区| 国产精品最新| 一本一道久久a久久精品蜜桃| 欧美激情视频一区二区三区在线播放| 美女久久久久| 国产精品久久观看| 亚洲精品观看| 欧美日一区二区|