什么是 MyBatis ?
? ? ? ?MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以對配置和原生Map使用簡單的 XML 或注解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。
特點:
? ? ? ?與JDBC相近的持久化框架,運行效率高;提供靈活的查詢方式,但需要自己寫SQL語句;不會自動進行級聯(lián)操作,需要使用SQL手動進行;需要考慮入?yún)⒑统鰠⒌念愋图捌鋵?yīng)關(guān)系。
基礎(chǔ)使用:
導(dǎo)入mybatis和mysql-connector-java依賴。
配置mybatis:
? ? ? ?該配置可在官網(wǎng)上找到,中文版!!很容易上手。

<environments>:可有多個子<environment>,default指向某一子<environment>。
<environment>:配置數(shù)據(jù)庫連接。
<transcationManager>:事務(wù)管理器配置。
<dataSource>:配置數(shù)據(jù)庫連接。
<mappers>:配置JavaBean映射文件所在位置。
JavaBean文件映射配置:



<mapper>:namespace屬性值不可少,用于識別不同的數(shù)據(jù)庫操作。
<select>:查詢方法,parameterType是入?yún)⒌念愋?,ResultMap是最終的查詢結(jié)果。
<resultMap>:配置返回結(jié)果的屬性。
<id/>:表的主鍵屬性。
<result>:表的非主鍵屬性。
<association>:一對多關(guān)聯(lián)表的屬性。其中column為調(diào)用的查詢方法的入?yún)?,javaType是關(guān)聯(lián)表的Bean對象。select是對應(yīng)的關(guān)聯(lián)表的查詢方法,組成為對應(yīng)JavaBean映射文件的namespace+ "." +<select>的id屬性值,詳見下圖。



此例中user與blog是一對一關(guān)系、與photo是一對多關(guān)系;blog與content、photo為一對多關(guān)系;content與photo是一對多關(guān)系。此處<collection>表示為對應(yīng)的JavaBean的集合。

由于不需要反向查詢,因而注釋了該屬性。

由于content是一個集合,而photo也是一個集合,類似于多對多,此處的查詢方法使用的是聯(lián)合查詢,否則會報錯。
此處的注釋是另一種實現(xiàn),該方式將在下面進行介紹。


測試類:

首先獲取類加載器的輸入流從配置文件中讀取mybatis配置,然后獲取session(獲取session時的參數(shù)表示采用自動提交事務(wù)的方式,不推薦!)。
調(diào)用selectOne方法,第一個參數(shù)為對應(yīng)JavaBean的namespace值 + "." + <select>的id值,第二個參數(shù)為其一參數(shù)方法的入?yún)ⅰ?/p>
xml配置的另一方式:
? ? ? ? ?將全部配置寫在同一個映射文件中:


由此其余映射文件可不需配置。
開啟緩存:
默認開啟一級緩存,若需要開啟二級緩存,只需在對應(yīng)的映射文件中加入<cache/>標簽。