什么是 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)⒌念愋臀杼眩琑esultMap是最終的查詢結(jié)果。
<resultMap>:配置返回結(jié)果的屬性管削。
<id/>:表的主鍵屬性倒脓。
<result>:表的非主鍵屬性。
<association>:一對多關(guān)聯(lián)表的屬性含思。其中column為調(diào)用的查詢方法的入?yún)⑵槠琷avaType是關(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配置的另一方式:
? ? ? ? ?將全部配置寫在同一個映射文件中:
由此其余映射文件可不需配置。
開啟緩存:
默認(rèn)開啟一級緩存厂庇,若需要開啟二級緩存渠啊,只需在對應(yīng)的映射文件中加入<cache/>標(biāo)簽。