MyBatis之自動映射與緩存問題及解析
如何配置自動映射?
自動映射配置autoMappingBehavior包含三個值:
NONE:取消自動映射。PARTIAL:只會自動映射,沒有定義嵌套結果集映射的結果集(默認值)。FULL:會自動映射任意復雜的結果集(無論是否嵌套)。
自動映射配置mybatis-config.xml
<settings> <settingname="autoMappingBehavior"value="PARTIAL"/> <settingname="mapUnderscoreToCamelCase"value="true"/> </settings>
- 【解釋】必須配置mapUnderscoreToCamelCase=true,否則失效。
- 自動映射結果返回用resultType;手動映射返回結果用resultMap
手動映射
手動映射操作步驟:
①使用<resultMap>標簽配置映射關系
②將<select>標簽中使用resultMap作為結果集類型
- 自動映射配置演示——mybatis-config.xml<resultMap

ID自動回填
useGeneratedKeys="true",keyProperty="id"指定主鍵賦值的字段名
接口定義用int類型接收

#和$區(qū)別及sql注入攻擊
- #{}:參數(shù)占位符,即:預編譯;在預處理時,會把參數(shù)用占位符"?"代替變成:selectfromuserwherename:?;
- ${}:字符串替換符,即:SOL拼接;只是簡單的字符串替換,在動態(tài)解析時變成:select*fromuserwherename='muse';
- SOL注入:即是指web應用程序對用戶輸入數(shù)據(jù)的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程序中事先定義好的查認語句的結尾上添加額外的SOL語句,在管理員不知情的情況下實現(xiàn)非法操作,以此來實現(xiàn)欺騙數(shù)據(jù)庫服務器執(zhí)行非授權的任意查詢,從而進一步得到相應的數(shù)據(jù)信息。
緩存機制。二級緩存怎么讀取
- 【開啟一級緩存】默認是開啟的,即:同一個SqlSession對象調用同一個Mapper的方法,如果沒有聲明需要刷新,并且緩存沒超時的情況下,一般只執(zhí)行一次SQL,其他的 DQL(查詢語句)SqlSession都只會取出當前緩存的數(shù)據(jù)。
- 【開啟二級緩存】在xxxMapper.xml中添加<cache/>標簽或者在對應的Dao類上面增加@CacheNamespace(blocking=true)注解以開啟二級緩存。并且執(zhí)行sqlSession.commit()使得二級緩存生效,其中,POJOJO必須實現(xiàn)Serializable接口。

二級緩存也叫做全局緩存,基于namespace級別的緩存。使用的是mapper的作用域,不同的sqlSession只要訪問的同一個mapper.xml文件,則共享二級緩存作用域。范圍是SqlSessionFactory。需要在全局配置文件中設置<settingname="cacheEnabled"value="true"/>,然后在具體的mapper.xml中添加<cache/>即可。
查詢流程:查詢時先到二級緩存查,如果沒有再去一級localCache查,再沒有則查詢數(shù)據(jù)庫,再放緩存一份,再返回客戶端。下次再查詢的時候直接從緩存返回,不再訪問數(shù)據(jù)庫,如果數(shù)據(jù)庫中發(fā)生commit()操作,則清空緩存。
1、如果在mapper映射文件中的CRUD標簽中加入flushCache="true",會導致一二級緩存機制都消失
2、也可以在測試類中直接手動清理緩存。
3、也可以在全局配置文件設置<settingsname="localCacheScope"value="STATEMENT"/>這樣會使一級緩存失效,二級緩存不受影響。
foreachconcatbindmybatisgenerator
源碼
- 底層還是JDBC去執(zhí)行
- 獲取mapper動態(tài)代理(JDK動態(tài)代理)
- 執(zhí)行invoke方法,獲取一個被緩存到的mapperMathod
級聯(lián)association&collection
- mybatis中的標簽association主要用于解決“hasone”類型的關系,它表示一個對象至多有一個關聯(lián)對象(一對一或多對一)。比如一般情況下,每個消息都對應一個消息詳情,消息和消息詳情之間的關系就可以使用association表示。
- mybatis中的標簽collection主要用于解決“hasmany”類型的關系,它表示一個對象有多個關聯(lián)對象。比如一般情況下,每個人都有多個聯(lián)系方式,人和聯(lián)系方式之間的關系就可以使用collection表示。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
詳解spring boot實現(xiàn)多數(shù)據(jù)源代碼實戰(zhàn)
本篇文章主要介紹了詳解spring boot實現(xiàn)多數(shù)據(jù)源代碼實戰(zhàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
Java實現(xiàn)發(fā)送手機短信語音驗證功能代碼實例
這篇文章主要介紹了Java實現(xiàn)發(fā)送手機短信語音驗證功能代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-09-09
SpringBoot實現(xiàn)不同接口指定上傳文件大小的具體步驟
這篇文章主要介紹了在Spring Boot中通過自定義注解、AOP攔截和配置文件實現(xiàn)不同接口上傳文件大小限制的方法,強調需設置全局閾值遠大于接口自定義值,確保驗證邏輯正確執(zhí)行,需要的朋友可以參考下2025-08-08

