最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis之自動映射與緩存問題及解析

 更新時間:2025年09月05日 15:18:53   作者:ByteBlossom  
文章主要介紹了MyBatis的配置與操作,包括自動映射(autoMappingBehavior)的設(shè)置(NONE、PARTIAL、FULL)、手動映射的步驟(使用<resultMap>標簽)、SQL注入攻擊的原理、緩存機制及其影響(一級緩存和二級緩存的作用、緩存失效的情況)

如何配置自動映射?

自動映射配置autoMappingBehavior包含三個值:

  • NONE:取消自動映射。
  • PARTIAL:只會自動映射,沒有定義嵌套結(jié)果集映射的結(jié)果集(默認值)。
  • FULL:會自動映射任意復(fù)雜的結(jié)果集(無論是否嵌套)。

自動映射配置mybatis-config.xml

<settings>
<settingname="autoMappingBehavior"value="PARTIAL"/>
<settingname="mapUnderscoreToCamelCase"value="true"/>
</settings>
  • 【解釋】必須配置mapUnderscoreToCamelCase=true,否則失效。
  • 自動映射結(jié)果返回用resultType;手動映射返回結(jié)果用resultMap

手動映射

手動映射操作步驟:

①使用<resultMap>標簽配置映射關(guān)系

②將<select>標簽中使用resultMap作為結(jié)果集類型

  • 自動映射配置演示——mybatis-config.xml<resultMap

ID自動回填

useGeneratedKeys="true",keyProperty="id"指定主鍵賦值的字段名

接口定義用int類型接收

#和$區(qū)別及sql注入攻擊

  • #{}:參數(shù)占位符,即:預(yù)編譯;在預(yù)處理時,會把參數(shù)用占位符"?"代替變成:selectfromuserwherename:?;
  • ${}:字符串替換符,即:SOL拼接;只是簡單的字符串替換,在動態(tài)解析時變成:select*fromuserwherename='muse';
  • SOL注入:即是指web應(yīng)用程序?qū)τ脩糨斎霐?shù)據(jù)的合法性沒有判斷或過濾不嚴,攻擊者可以在web應(yīng)用程序中事先定義好的查認語句的結(jié)尾上添加額外的SOL語句,在管理員不知情的情況下實現(xiàn)非法操作,以此來實現(xiàn)欺騙數(shù)據(jù)庫服務(wù)器執(zhí)行非授權(quán)的任意查詢,從而進一步得到相應(yīng)的數(shù)據(jù)信息。

緩存機制。二級緩存怎么讀取

  • 【開啟一級緩存】默認是開啟的,即:同一個SqlSession對象調(diào)用同一個Mapper的方法,如果沒有聲明需要刷新,并且緩存沒超時的情況下,一般只執(zhí)行一次SQL,其他的 DQL(查詢語句)SqlSession都只會取出當前緩存的數(shù)據(jù)。
  • 【開啟二級緩存】在xxxMapper.xml中添加<cache/>標簽或者在對應(yīng)的Dao類上面增加@CacheNamespace(blocking=true)注解以開啟二級緩存。并且執(zhí)行sqlSession.commit()使得二級緩存生效,其中,POJOJO必須實現(xiàn)Serializable接口。

二級緩存也叫做全局緩存,基于namespace級別的緩存。使用的是mapper的作用域,不同的sqlSession只要訪問的同一個mapper.xml文件,則共享二級緩存作用域。范圍是SqlSessionFactory。需要在全局配置文件中設(shè)置<settingname="cacheEnabled"value="true"/>,然后在具體的mapper.xml中添加<cache/>即可。

查詢流程:查詢時先到二級緩存查,如果沒有再去一級localCache查,再沒有則查詢數(shù)據(jù)庫,再放緩存一份,再返回客戶端。下次再查詢的時候直接從緩存返回,不再訪問數(shù)據(jù)庫,如果數(shù)據(jù)庫中發(fā)生commit()操作,則清空緩存。

1、如果在mapper映射文件中的CRUD標簽中加入flushCache="true",會導(dǎo)致一二級緩存機制都消失

2、也可以在測試類中直接手動清理緩存。

3、也可以在全局配置文件設(shè)置<settingsname="localCacheScope"value="STATEMENT"/>這樣會使一級緩存失效,二級緩存不受影響。

  • foreach
  • concatbind
  • mybatisgenerator

源碼

  • 底層還是JDBC去執(zhí)行
  • 獲取mapper動態(tài)代理(JDK動態(tài)代理)
  • 執(zhí)行invoke方法,獲取一個被緩存到的mapperMathod

級聯(lián)association&collection

  • mybatis中的標簽association主要用于解決“hasone”類型的關(guān)系,它表示一個對象至多有一個關(guān)聯(lián)對象(一對一或多對一)。比如一般情況下,每個消息都對應(yīng)一個消息詳情,消息和消息詳情之間的關(guān)系就可以使用association表示。
  • mybatis中的標簽collection主要用于解決“hasmany”類型的關(guān)系,它表示一個對象有多個關(guān)聯(lián)對象。比如一般情況下,每個人都有多個聯(lián)系方式,人和聯(lián)系方式之間的關(guān)系就可以使用collection表示。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

定结县| 聂荣县| 大冶市| 兴文县| 易门县| 东乡族自治县| 广安市| 社旗县| 崇明县| 临猗县| 澳门| 西林县| 青川县| 东城区| 明光市| 罗城| 法库县| 若羌县| 高唐县| 高密市| 沽源县| 博爱县| 遂昌县| 潞城市| 璧山县| 睢宁县| 札达县| 上虞市| 扶风县| 新巴尔虎右旗| 阜平县| 永仁县| 阳泉市| 绿春县| 巢湖市| 资兴市| 扎赉特旗| 环江| 长葛市| 嘉鱼县| 东丰县|