實現(xiàn)原理
JDK動態(tài)代理众羡,jdbc
啟動流程
讀取mybatis-config.xml
SqlSessionFactoryBuilder->sqlSessionFactory->openSession()->sqlSession->getMapper()->執(zhí)行
sql注入
#{}是預(yù)編譯處理欲低,${}是字符串替換屎飘; 后者一般用來設(shè)置不同表名烙无;
字符替換不能防止sql注入瘦陈,所以可以自己加一些簡單的判斷跷车,比如變量不能太長链方,或得在特定的集合里面牵现。
Dao接口
Dao接口里的方法铐懊,是不能重載的,因為是全限名+方法名定位MappedStatement瞎疼。
工作原理是JDK動態(tài)代理科乎,Mybatis運行時會使用JDK動態(tài)代理為Dao接口生成代理proxy對象,代理對象proxy會攔截接口方法贼急,轉(zhuǎn)而執(zhí)行MappedStatement所代表的sql茅茂,然后將sql執(zhí)行結(jié)果返回。
返回結(jié)果封裝
1.<resultMap>標簽太抓,逐一定義列名和對象屬性名之間的映射關(guān)系
2.將列別名書寫為對象屬性名
Mybatis通過反射創(chuàng)建對象空闲,同時使用反射給對象的屬性逐一賦值并返回
緩存
分一級,二級緩存
一級緩存作用域為Session走敌,基于 PerpetualCache 的 HashMap 本地緩存
二級緩存作用域為Mapper(Namespace)碴倾,需要在sql文件指定開啟,可以自定義存儲源掉丽,比如用Ehcache