《MyBatis 3.5.2參考文檔》學習筆記

構建 SqlSessionFactory

每個基於 MyBatis  的應用都是以一個  SqlSessionFactory 的實例爲核心的。SqlSessionFactory  的實例可以通過 SqlSessionFactoryBuilder  獲得。而 SqlSessionFactoryBuilder    則可以從 XML 配置文件或一個預先定製的 Configuration       的實例構建出  SqlSessionFactory 的實例。

從    XML    文件中構建 

從    XML    文件中構建    SqlSessionFactory    的實例非常簡單,建議使用類路徑下的資源文件進行配置。    但是也可 以使用任意的輸入流(InputStream)實例,包括字符串形式的文件路徑或者    file://    的    URL    形式的文件路徑 來配置。MyBatis    包含一個名叫    Resources    的工具類,它包含一些實用方法,可使從    classpath    或其他位置 加載資源文件更加容易。

String	resource="org/mybatis/example/mybatis-config.xml"; 
InputStream	inputStream	=Resources.getResourceAsStream(resource); 
SqlSessionFactory	sqlSessionFactory=new	SqlSessionFactoryBuilder().build(inputStream);

XML    配置文件中包含了對    MyBatis    系統的核心設置,包含獲取數據庫連接實例的數據源(DataSource)和決定事 務作用域和控制方式的事務管理器(TransactionManager)

不使用    XML    構建    SqlSessionFactory

基於Java類的配置


如果存在一個同名    XML    配 置文件,MyBatis    會自動查找並加載它(在這個例子中,基於類路徑和    BlogMapper.class    的類名,會加載 BlogMapper.xml)。

從    SqlSessionFactory    中獲取    SqlSession

SqlSession    完全包 含了面向數據庫執行    SQL    命令所需的所有方法。你可以通過    SqlSession    實例來直接執行已映射的    SQL    語句。


探究已映射的    SQL    語句

一個語句既可以通過    XML    定義,也可以通過註解定義。

XML方式映射

方法一: 

 

方法二: 

 

 命名空間的作用有兩個,一個是利用更長的完全限定名來將不同的語句隔離開來,同時也實現了接口綁 定。

必須使用命名空間,解決不同包同類的問題。

註解方式映射

使用註解來映射簡單語句會使代碼顯得更加簡潔,然而對於稍微複雜一點的語句,Java    註解就力不從心了,並且會 顯得更加混亂。    因此,如果你需要完成很複雜的事情,那麼最好使用    XML    來映射語句

依賴注入框架可以創建線程安全的、基於事務的    SqlSession    和映射器,並將它們直接注入到你的    bean    中,因此 可以直接忽略它們的生命週期。

SqlSessionFactoryBuilder:

這個類可以被實例化、使用和丟棄,一旦創建了    SqlSessionFactory,就不再需要它了。    因此 SqlSessionFactoryBuilder    實例的最佳作用域是方法作用域(也就是局部方法變量)。    你可以重用 SqlSessionFactoryBuilder    來創建多個    SqlSessionFactory    實例,但是最好還是不要讓其一直存在,以保 證所有的    XML    解析資源可以被釋放給更重要的事情

 

SqlSessionFactory

SqlSessionFactory    一旦被創建就應該在應用的運行期間一直存在,沒有任何理由丟棄它或重新創建另一個實例。 使用    SqlSessionFactory    的最佳實踐是在應用運行期間不要重複創建多次,多次重建    SqlSessionFactory    被 視爲一種代碼“壞味道(bad    smell)”。因此    SqlSessionFactory    的最佳作用域是應用作用域。    有很多方法可 以做到,最簡單的就是使用單例模式或者靜態單例模式。
 

SqlSession

每個線程都應該有它自己的    SqlSession    實例。SqlSession    的實例不是線程安全的,因此是不能被共享的,所以 它的最佳的作用域是請求或方法作用域。    絕對不能將    SqlSession    實例的引用放在一個類的靜態域,甚至一個類的 實例變量也不行。    也絕不能將    SqlSession    實例的引用放在任何類型的託管作用域中,比如    Servlet    框架中的 HttpSession。    如果你現在正在使用一種    Web    框架,要考慮    SqlSession    放在一個和    HTTP    請求對象相似的 作用域中。    換句話說,每次收到的    HTTP    請求,就可以打開一個    SqlSession,返回一個響應,就關閉它。    這個 關閉操作是很重要的,你應該把這個關閉操作放到    finally    塊中以確保每次都能執行關閉。    下面的示例就是一個 確保    SqlSession    關閉的標準模式:

 映射器實例

映射器是一些由你創建的、綁定你映射的語句的接口映射器接口的實例是從    SqlSession    中獲得的。任何映射器實例的最大作用域是和請求它們的    SqlSession    相同的。儘管如此,映射器實例的最佳作用域 是方法作用域。  

 配置:

設置:

緩存

MyBatis    內置了一個強大的事務性查詢緩存機制,它可以非常方便地配置和定製。
默認情況下,只啓用了本地的會話緩存,它僅僅對一個會話中的數據進行緩存。    

要啓用全局的二級緩存,只需要在你 的    SQL    映射文件中添加一行:
  

 <cache/>

基本上就是這樣。這個簡單語句的效果如下:

  • 映射語句文件中的所有    select    語句的結果將會被緩存。
  • 映射語句文件中的所有    insert、update    和    delete    語句會刷新緩存。
  • 緩存會使用最近最少使用算法(LRU,    Least    Recently    Used)算法來清除不需要的緩存。
  • 緩存不會定時進行刷新(也就是說,沒有刷新間隔)。
  • 緩存會保存列表或對象(無論查詢方法返回哪種)的    1024    個引用。
  • 緩存會被視爲讀/寫緩存,這意味着獲取到的對象並不是共享的,可以安全地被調用者修改,而不干擾其他調用 者或線程所做的潛在修改。

這個更高級的配置創建了一個    FIFO    緩存,每隔    60    秒刷新,最多可以存儲結果對象或列表的    512    個引用,而且 返回的對象被認爲是隻讀的,因此對它們進行修改可能會在不同線程中的調用者產生衝突。
 

使用自定義緩存
 

<cache    type="com.domain.something.MyCustomCache"/>
  • type    屬性指定的類必須實現    org.mybatis.cache.Cache    接 口,
  • 且提供一個接受    String    參數作爲    id    的構造器。    
  • 這個接口是    MyBatis    框架中許多複雜的接口之一,但是 行爲卻非常簡單。

SqlSession

執行語句方法

總之,每個映射器方法簽名應該匹配相關聯的    SqlSession    方法,而字符串參數    ID    無需匹配。相反,方法名必須 匹配映射語句的    ID。

你可以傳遞多個參數給一個映射器方法。如果你這樣做了,默認情況下它們將會以    "param"    字符串緊跟着它們在參 數列表中的位置來命名,

比如:#{param1}、#{param2}等。

如果你想改變參數的名稱(只在多參數情況下),那麼 你可以在參數上使用    @Param("paramName")    註解。

SQL類

日誌配置

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