什么是 MyBatis ?
? ? ? ?MyBatis 是支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以對(duì)配置和原生Map使用簡單的 XML 或注解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫中的記錄。
特點(diǎn):
? ? ? ?與JDBC相近的持久化框架,運(yùn)行效率高;提供靈活的查詢方式,但需要自己寫SQL語句;不會(huì)自動(dòng)進(jìn)行級(jí)聯(lián)操作,需要使用SQL手動(dòng)進(jìn)行;需要考慮入?yún)⒑统鰠⒌念愋图捌鋵?duì)應(yīng)關(guān)系。
基礎(chǔ)使用:
導(dǎo)入mybatis和mysql-connector-java依賴。
配置mybatis:
? ? ? ?該配置可在官網(wǎng)上找到,中文版!!很容易上手。
<environments>:可有多個(gè)子<environment>,default指向某一子<environment>。
<environment>:配置數(shù)據(jù)庫連接。
<transcationManager>:事務(wù)管理器配置。
<dataSource>:配置數(shù)據(jù)庫連接。
<mappers>:配置JavaBean映射文件所在位置。
JavaBean文件映射配置:
<mapper>:namespace屬性值不可少,用于識(shí)別不同的數(shù)據(jù)庫操作。
<select>:查詢方法,parameterType是入?yún)⒌念愋停琑esultMap是最終的查詢結(jié)果。
<resultMap>:配置返回結(jié)果的屬性。
<id/>:表的主鍵屬性。
<result>:表的非主鍵屬性。
<association>:一對(duì)多關(guān)聯(lián)表的屬性。其中column為調(diào)用的查詢方法的入?yún)ⅲ琷avaType是關(guān)聯(lián)表的Bean對(duì)象。select是對(duì)應(yīng)的關(guān)聯(lián)表的查詢方法,組成為對(duì)應(yīng)JavaBean映射文件的namespace+ "." +<select>的id屬性值,詳見下圖。
此例中user與blog是一對(duì)一關(guān)系、與photo是一對(duì)多關(guān)系;blog與content、photo為一對(duì)多關(guān)系;content與photo是一對(duì)多關(guān)系。此處<collection>表示為對(duì)應(yīng)的JavaBean的集合。
由于不需要反向查詢,因而注釋了該屬性。
由于content是一個(gè)集合,而photo也是一個(gè)集合,類似于多對(duì)多,此處的查詢方法使用的是聯(lián)合查詢,否則會(huì)報(bào)錯(cuò)。
此處的注釋是另一種實(shí)現(xiàn),該方式將在下面進(jìn)行介紹。
測試類:
首先獲取類加載器的輸入流從配置文件中讀取mybatis配置,然后獲取session(獲取session時(shí)的參數(shù)表示采用自動(dòng)提交事務(wù)的方式,不推薦!)。
調(diào)用selectOne方法,第一個(gè)參數(shù)為對(duì)應(yīng)JavaBean的namespace值 + "." + <select>的id值,第二個(gè)參數(shù)為其一參數(shù)方法的入?yún)ⅰ?/p>
xml配置的另一方式:
? ? ? ? ?將全部配置寫在同一個(gè)映射文件中:
由此其余映射文件可不需配置。
開啟緩存:
默認(rèn)開啟一級(jí)緩存,若需要開啟二級(jí)緩存,只需在對(duì)應(yīng)的映射文件中加入<cache/>標(biāo)簽。