1. 程式人生 > 實用技巧 >JAVA知識點梳理-Mybatis

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;