JAVA知識點梳理-Mybatis
四、MyBatis 篇
\44. 說說 MyBatis 的快取
MyBatis提供一級快取和二級快取的機制。
一級快取是SqlSession級別的快取(預設是支援一級快取,不需要再配置檔案中配置一級快取),在操作資料庫時,每個SqlSession類的例項物件中有一個數據結構(HashMap)可以用來儲存快取資料,不同的SqlSession類的例項物件快取的資料區域(HashMap)是互不影響的。當在同一個SqlSession中執行兩次相同的sql語句時,第一次執行完畢會將資料寫到記憶體中,第二次查詢不執行sql直接從記憶體中獲取。
二級快取是Mapper級別的快取,多個SqlSession類的例項物件操作同一個Mapper配置檔案中的sql語句,多個SqlSession類的例項物件可以共用二級快取,二級快取是跨SqlSession的。一個Mapper有一個自己的二級快取區域(按照namespace劃分),兩個Mapper的namespace如果相同,那麼這兩個Mapper執行的sql查詢會被快取在同一個二級快取中。要開啟二級快取需要在配置檔案中設定cacheEnabled屬性為true。
\45. JDBC 程式設計有哪些步驟?
1.註冊驅動
2.獲取連線
3.獲取資料庫操作物件
4.執行sql
5.處理查詢結果集
6.釋放資源
\46. 說一下 MyBatis 中使用的 #和 $ 有什麼區別
sql注入問題:SQL注入即是指web應用程式對使用者輸入資料的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程式中事先定義好的查詢語句的結尾上新增額外的SQL語句
{}在預編譯時為傳入的引數加了''能夠有效防止sql注入問題
${}也有一定要使用的時候:比如order by排序時
\47. MyBatis 中比如 UserMapper.java 是介面,為什麼沒有實現類還能呼叫?
mybatis是通過 mapper 介面載入對映檔案 在mapper.xml中
<mapper namespace="com.yish.dao.UserDao">
\48. MyBatis 中見過什麼設計模式?
1、Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;
2、工廠模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;
3、單例模式,例如ErrorContext和LogFactory;
4、代理模式,Mybatis實現的核心,比如MapperProxy、ConnectionLogger,用的jdk的動態代理;還有executor.loader包使用了cglib或者javassist達到延遲載入的效果;
5、組合模式,例如SqlNode和各個子類ChooseSqlNode等;
6、模板方法模式,例如BaseExecutor和SimpleExecutor,還有BaseTypeHandler和所有的子類例如IntegerTypeHandler;
7、介面卡模式,例如Log的Mybatis介面和它對jdbc、log4j等各種日誌框架的適配實現;
8、裝飾者模式,例如Cache包中的cache.decorators子包中等各個裝飾者的實現;
9、迭代器模式,例如迭代器模式PropertyTokenizer;