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框架? 用於實現面向對象編程語言裏不同類型系統的數據之間的轉換