成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MyBatis知識(shí)點(diǎn)整理

zhangqh / 2271人閱讀

摘要:得到用戶信息,將用戶信息存儲(chǔ)到一級(jí)緩存中。如果中間去執(zhí)行操作執(zhí)行插入更新刪除,則會(huì)清空中的一級(jí)緩存,這樣做的目的為了讓緩存中存儲(chǔ)的是最新的信息,避免臟讀。

基礎(chǔ):

1、 概念:Java當(dāng)中的一個(gè)持久層框架。
2、 特點(diǎn)、優(yōu)勢:
(1)把java代碼和SQL代碼做了一個(gè)完全分離。
(2)良好支持復(fù)雜對(duì)象的映射(輸入映射、輸出映射)
(3)使用動(dòng)態(tài)SQL,可以預(yù)防SQL注入。
3、 原理:
(1)創(chuàng)建mybatis-config.xml配置文件
(2)創(chuàng)建sqlSessionFactory
(3)編寫數(shù)據(jù)庫表對(duì)應(yīng)的實(shí)體類
(4)創(chuàng)建mybatis的sql映射文件,在這個(gè)文件中,把實(shí)體類的屬性和數(shù)據(jù)庫表的列聯(lián)系起來,并且可以編寫sql語句
(5)從sqlSessionFactory的實(shí)例獲取session
(6)session內(nèi)部通過Executor執(zhí)行器執(zhí)行操作。Executor會(huì)用到mapped statement對(duì)象,這個(gè)對(duì)象是對(duì)數(shù)據(jù)庫存儲(chǔ)的封裝,包括:sql語句、輸入?yún)?shù)、輸出結(jié)果類型
(7)關(guān)閉session

MyBatis緩存:

1、概念:
(1)一級(jí)緩存:一級(jí)緩存是SqlSession(會(huì)話)級(jí)別的緩存。在操作數(shù)據(jù)庫時(shí)需要構(gòu)造sqlSession對(duì)象,在對(duì)象中有一個(gè)數(shù)據(jù)結(jié)構(gòu)(HashMap)用于存儲(chǔ)緩存數(shù)據(jù)。不同的sqlSession之間的緩存數(shù)據(jù)區(qū)域(HashMap)是互相不影響的。
(2)二級(jí)緩存:二級(jí)緩存是mapper級(jí)別的緩存,多個(gè)SqlSession去操作同一個(gè)Mapper的sql語句,多個(gè)SqlSession可以共用二級(jí)緩存,二級(jí)緩存是跨SqlSession的。(二級(jí)緩存的原理和一級(jí)緩存原理一樣,第一次查詢,會(huì)將數(shù)據(jù)放入緩存中,然后第二次查詢則會(huì)直接去緩存中取。但是一級(jí)緩存是基于 sqlSession 的,而 二級(jí)緩存是基于 mapper文件的namespace的,也就是說多個(gè)sqlSession可以共享一個(gè)mapper中的二級(jí)緩存區(qū)域,并且如果兩個(gè)mapper的namespace相同,即使是兩個(gè)mapper,那么這兩個(gè)mapper中執(zhí)行sql查詢到的數(shù)據(jù)也將存在相同的二級(jí)緩存區(qū)域中)
它們的關(guān)系如圖:

2、一級(jí)緩存的使用:
我們?cè)谝粋€(gè) sqlSession 中,對(duì)User表根據(jù)id進(jìn)行兩次查詢,查看他們發(fā)出sql語句的情況:
(1)第一次發(fā)起查詢用戶id為1的用戶信息,先去找緩存中是否有id為1的用戶信息,如果沒有,從數(shù)據(jù)庫查詢用戶信息。得到用戶信息,將用戶信息存儲(chǔ)到一級(jí)緩存中。
(2)如果中間sqlSession去執(zhí)行commit操作(執(zhí)行插入、更新、刪除),則會(huì)清空SqlSession中的一級(jí)緩存,這樣做的目的為了讓緩存中存儲(chǔ)的是最新的信息,避免臟讀。
(3)第二次發(fā)起查詢用戶id為1的用戶信息,先去找緩存中是否有id為1的用戶信息,緩存中有,直接從緩存中獲取用戶信息。

3、二級(jí)緩存的使用:

4、注意事項(xiàng):
(1)如果設(shè)置了cacheEnabled=true; 那么MyBatis在執(zhí)行查詢的時(shí)候,先查看二級(jí)緩存(全局緩存)是否有查詢的結(jié)果,如果有,直接返回緩存的結(jié)果;如果沒有,再執(zhí)行真正的查詢,把查詢的結(jié)果放到緩存中,再把結(jié)果返回給用戶。
(2)二級(jí)緩存:mybatis中,每一個(gè)mapper都可以有一個(gè)二級(jí)緩存。使用節(jié)點(diǎn)配置。
(3)二級(jí)緩存使用場景:

 對(duì)于訪問多的查詢請(qǐng)求且用戶對(duì)查詢結(jié)果實(shí)時(shí)性要求不高,此時(shí)可采用mybatis二級(jí)緩存技術(shù)降低數(shù)據(jù)庫訪問量,提高訪問速度,業(yè)務(wù)場景比如:耗時(shí)較高的統(tǒng)計(jì)分析sql、電話賬單查詢sql等。實(shí)現(xiàn)方法如下:通過設(shè)置刷新間隔時(shí)間,由mybatis每隔一段時(shí)間自動(dòng)清空緩存,根據(jù)數(shù)據(jù)變化頻率設(shè)置緩存刷新間隔flushInterval,比如設(shè)置為30分鐘、60分鐘、24小時(shí)等,根據(jù)需求而定。
 mybatis二級(jí)緩存對(duì)細(xì)粒度的數(shù)據(jù)級(jí)別的緩存實(shí)現(xiàn)不好,比如如下需求:對(duì)商品信息進(jìn)行緩存,由于商品信息查詢?cè)L問量大,但是要求用戶每次都能查詢最新的商品信息,此時(shí)如果使用mybatis的二級(jí)緩存就無法實(shí)現(xiàn)當(dāng)一個(gè)商品變化時(shí)只刷新該商品的緩存信息而不刷新其它商品的信息,因?yàn)閙ybaits的二級(jí)緩存區(qū)域以mapper為單位劃分的,當(dāng)一個(gè)商品信息變化會(huì)將所有商品信息的緩存數(shù)據(jù)全部清空。解決此類問題可能需要在業(yè)務(wù)層根據(jù)需求對(duì)數(shù)據(jù)有針對(duì)性緩存。
語法:

1、#{}和${}
(1)#{}是一個(gè)占位符,接收輸入?yún)?shù),參數(shù)類型可以是基本類型、POJO、HashMap
(2)${}是一個(gè)拼接符號(hào),可能導(dǎo)致sql注入,不建議使用。
2、resultMap標(biāo)簽:
(1)結(jié)果集映射的標(biāo)簽
(2)resultMap:

A、type:指定結(jié)果集中保存的實(shí)體類的類型
B、id:resultMap標(biāo)簽的標(biāo)識(shí)
C、autoMapping:值范圍true|false,設(shè)置是否啟動(dòng)自動(dòng)映射功能。自動(dòng)映射功能就是自動(dòng)查找與字段名小寫同名的屬性名,并調(diào)用setter方法。設(shè)置為false之后,需要在resultMap內(nèi)明確注明映射關(guān)系才會(huì)調(diào)用對(duì)應(yīng)的setter方法。

(3)id:用于設(shè)置主鍵字段與領(lǐng)域模型屬性的映射關(guān)系
(4)result:用于設(shè)置普通字段與領(lǐng)域模型屬性的映射關(guān)系
3、sql標(biāo)簽:用來封裝sql語句或者sql片段

MyBatis的DAO開發(fā)方法:
1、 使用mapper代理方法:
(1) 編寫mapper.java 的接口類
(2) 編寫mapper.xml
2、 編寫接口類,需要遵守一些規(guī)范,MyBatis可以自動(dòng)生成接口類的DAO實(shí)現(xiàn)類。規(guī)范有:
(1) mapper.xml中namespace需要等于mapper接口類的地址
(2) mapper接口類的方法的名稱等于mapper.xml中statement(對(duì)應(yīng)sql語句)的id
(3) mapper接口類的輸入?yún)?shù)類型等于mapper.xml中statement的parameterType指定的類型
(4) mapper接口類的返回參數(shù)類型等于mapper.xml中statement的resultType指定的類型
3、

MyBatis和Hibernate的本質(zhì)區(qū)別:
1、 Hibernate不需要寫sql,通過hql或者Hibernate直接生成sql。Mybatis需要寫sql。
2、 Mybatis適合于需求經(jīng)常改動(dòng)的項(xiàng)目,因?yàn)樗膕ql由程序員生成,容易改動(dòng)。Hibernate適合于需求改動(dòng)較少的項(xiàng)目。

MyBatis和Ibatis的本質(zhì)區(qū)別:
1、MyBatis簡化了編碼過程,不需要寫DAO的實(shí)現(xiàn)類。直接寫一個(gè)DAO的接口和一個(gè)配置文件。MyBatis自動(dòng)生成DAO實(shí)現(xiàn)類。

嵌套查詢 及 嵌套結(jié)果查詢:
嵌套查詢:使用2次查詢,然后在MyBatis(內(nèi)存)中進(jìn)行拼裝??赡芤餘+1問題。
嵌套結(jié)果查詢:使用1次查詢,然后將結(jié)果進(jìn)行拼裝。
具體參考:https://www.2cto.com/database...

參考:https://www.cnblogs.com/ysoce...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71589.html

相關(guān)文章

  • Java面試前需要了解的東西

    摘要:我在面試前針對(duì)基礎(chǔ)也花了不少的時(shí)間,期間也將自己寫過的博文粗略地刷了一遍,同時(shí)也在網(wǎng)上找了不少比較好的資料部分是沒看完的??疵嬖囶}也是校驗(yàn)自己是否真正理解了這個(gè)知識(shí)點(diǎn),也很有可能會(huì)有新的收獲。 一、前言 只有光頭才能變強(qiáng) 回顧前面: 廣州三本找Java實(shí)習(xí)經(jīng)歷 上一篇寫了自己面試的經(jīng)歷和一些在面試的時(shí)候遇到的題目(筆試題和面試題)。 我在面試前針對(duì)Java基礎(chǔ)也花了不少的時(shí)間,期間也將...

    renweihub 評(píng)論0 收藏0
  • MyBatis 源碼分析系列文章合集

    摘要:簡介我從七月份開始閱讀源碼,并在隨后的天內(nèi)陸續(xù)更新了篇文章。考慮到超長文章對(duì)讀者不太友好,以及拆分文章工作量也不小等問題。經(jīng)過兩周緊張的排版,一本小小的源碼分析書誕生了。我在寫系列文章中,買了一本書作為參考,這本書是技術(shù)內(nèi)幕。 1.簡介 我從七月份開始閱讀MyBatis源碼,并在隨后的40天內(nèi)陸續(xù)更新了7篇文章。起初,我只是打算通過博客的形式進(jìn)行分享。但在寫作的過程中,發(fā)現(xiàn)要分析的代碼...

    Crazy_Coder 評(píng)論0 收藏0
  • Java后端

    摘要:,面向切面編程,中最主要的是用于事務(wù)方面的使用。目標(biāo)達(dá)成后還會(huì)有去構(gòu)建微服務(wù),希望大家多多支持。原文地址手把手教程優(yōu)雅的應(yīng)用四手把手實(shí)現(xiàn)后端搭建第四期 SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Spring 兩大核心之 AOP 學(xué)習(xí) | 掘金技術(shù)征文 原本地址:SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Sp...

    joyvw 評(píng)論0 收藏0
  • Java進(jìn)階之路

    摘要:探索專為而設(shè)計(jì)的將探討進(jìn)行了何種改進(jìn),以及這些改進(jìn)背后的原因。關(guān)于最友好的文章進(jìn)階前言之前就寫過一篇關(guān)于最友好的文章反響很不錯(cuò),由于那篇文章的定位就是簡單友好,因此盡可能的摒棄復(fù)雜的概念,只抓住關(guān)鍵的東西來講,以保證大家都能看懂。 周月切換日歷 一個(gè)可以進(jìn)行周月切換的日歷,左右滑動(dòng)的切換月份,上下滑動(dòng)可以進(jìn)行周,月不同的視圖切換,可以進(jìn)行事件的標(biāo)記,以及節(jié)假日的顯示,功能豐富 Andr...

    sushi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<