Mybatis知識點以及面試點總結

mybatis讀取mapper文件有哪幾種方式?優先級如何?

<!-- 使用相對於類路徑的資源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用完全限定資源定位符(URL) -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  <mapper url="file:///var/mappers/BlogMapper.xml"/>
  <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- 使用映射器接口實現類的完全限定類名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- 將包內的映射器接口實現全部註冊爲映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>                

優先級: package>resource>url>class

mubatis的exectuor有幾種方式

SimpleExecutor: 簡單執行器,是MyBatis中默認使用的執行器,每執行一次update或select,就開啓一個Statement對象,用完就直接關閉Statement對象(可以是Statement或者是PreparedStatment對象)

ReuseExecutor: 可重用執行器,這裏的重用指的是重複使用Statement,它會在內部使用一個Map把創建的Statement都緩存起來,每次執行SQL命令的時候,都會去判斷是否存在基於該SQL的Statement對象,如果存在Statement對象並且對應的connection還沒有關閉的情況下就繼續使用之前的Statement對象,並將其緩存起來。因爲每一個SqlSession都有一個新的Executor對象,所以我們緩存在ReuseExecutor上的Statement作用域是同一個SqlSession。

BatchExecutor: 批處理執行器,用於將多個SQL一次性輸出到數據庫

CachingExecutor: 緩存執行器,先從緩存中查詢結果,如果存在,就返回;如果不存在,再委託給Executor delegate 去數據庫中取,delegate可以是上面任何一個執行器

mybatis的一級緩存是默認開啓的嗎?開啓的話是怎麼使用的?

因爲cacheEnabled 所以一級緩存是默認開啓的 。通過id  offset limit sql 四個屬性來生成緩存的key

 一級緩存通過 HashMap 實現,它的鍵對象根據SQL的ID,參數,SQL本身,分頁參數以及JDBC的參數信息構成。

 二級緩存mapper級別的緩存,多個SqlSession去操作同一個Mapper的sql語句,多個SqlSession去操作數據庫得到數據會存在二級緩存區域多個SqlSession可以共用二級緩存,二級緩存是跨SqlSession的。

 二級緩存是多個SqlSession共享的,其作用域是mapper的同一個namespace,第一次執行完畢會將數據庫中查詢的數據寫到緩存(內存),第二次會從緩存中獲取數據將不再從數據庫查詢,從而提高查詢效率。

Mybatis默認沒有開啓二級緩存需要在setting全局參數中配置開啓二級緩存。  

如果緩存中有數據就不用從數據庫中獲取,大大提高系統性能。

不建議使用二級緩存 不同的namespace操作同一個表的話 會出現數據混亂

阿里面試題:A系統傳B系統一條sql如何判斷sql是正確是sql  ???

什麼是orm框架? 用於實現面向對象編程語言裏不同類型系統的數據之間的轉換

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章