Mybatis小結


一、mybatis的優勢:

1. JDBC相比,減少了大量冗餘代碼。

2. 框架體積小,學習成本相對較低。

3. SQL語句和代碼分離,降低耦合度,管理便捷,可重用度高。

4. 推薦XML配置方式,支持動態SQL語句的編寫。

5. 提供映射標籤,支持對象與數據庫ORM字段關係映射。

 

二、mybatis組成:

一般包括一個接口(java文件)和一個XML(映射)文件

 

四、mybatis規則:

<!-- 求接口和XML文件名保持一致; -->

 

 

<!-- 要求接口中方法名與xml文件方法中的id屬性保持一致 -->

<!-- 求接口中綁定的形參和返回值變量的類型與xml文件方法中的parameterTyperesultType保持一致;-->

<!-- resultTypeparameterType的參數可以使用別名-->

 

 

三、常用標籤

<!-- namespace:配置在映射文件的最上端||xml文件路徑的全限定名 -->

  

Select:查詢

<!-- resultMap:一般用於封裝多表查詢時的結果集 -->

<!-- type:返回值的類(可用別名)-->

<!-- id:代表該po在數據庫中的主鍵 -->

<!-- column:代表sql的列名 -->

<!-- result:代表po中的屬性 -->

<!-- include:調用-->

<!-- sql:sql片段(提取出常用的sql語句、字段)-->

<!-- refid:參考的id,指向調用的sql語句id-->

<!-- #{xxx}:這表示一個佔位符(?),在select語句中通常可以爲任意字符-->

 

Insert:插入

<!-- insert:一般用於插入 -->

<!-- trim:格式化標記(可以完成setwhere-->

<!-- prefixsuffix:trim標籤包裹的部分的前面或者後面添加內容-->

<!-- prefixOverridessuffixOverrides :覆蓋“”中的內容 -->

<!-- #{xxx}:insert語句中參數必須是po中的屬性,且有序-->

  

Update:更新

<!-- if:動態sql語句,意思和java中的一樣 -->

<!-- test:判斷條件-->

<!-- set:sql語句中set關鍵字-->

<!-- prefixOverridessuffixOverrides :覆蓋“”中的內容 -->

<!-- #{xxx}:insert語句中參數必須是po中的屬性,且有序-->

 

Delete:刪除

<!-- delete:sql刪除關鍵字 -->

  

以上爲增刪改查用到的基本語法,接下來是拓展語法。


1. <resultMap>

場景:當返回結果集中包含(一對一映射,一對多映射)時,需要通過該標籤封裝結果;

 <!-- type:映射的po類全限定名(可用別名),Id:唯一標識   -->

 

 

 <!-- id:映射的po類中的主鍵字段 || 聯合主鍵的配置多個  -->

 <!-- column:映射字段在數據庫中對應的字段  -->

<!-- property:映射字段在po類中對應的字段  -->

 

 

<!-- association :用於一對一映射  -->

<!-- property:order類中對應的字段  -->

<!-- javaType:po類的全限定名  -->

 

  

<!-- collection:用於一對多映射  -->

<!-- property:order類中對應的字段  -->

<!-- ofType:po類的全限定名  -->

  

<!-- 除了使用po類進行映射之外,還可以通過select嵌套一個查詢,以column(關聯主鍵)給的字段作爲參數,將結果映射到teacher字段中 -->

 

動態sql

1.<if>

場景:當數據庫操作對變量值有一定限制時

<!-- test: 對指定屬性做出限制的條件 -->

<!-- concat:拼接模糊查詢關鍵字  -->

 

 

2. <choose>(when,otherwise)

場景:當我們僅想使用多個查詢條件中的一個。(類似java中switch)

<!-- choose: 父類標籤,無實際意義,僅僅是爲了包含多個when -->

<!-- when:當滿足test中的條件時(true),執行when中的語句並跳出choose,其餘的when條件不執行 -->

<!-- otherwise: 類似switch中的default,條件都不滿足時執行。 -->

 

3. <trim>

場景:多條件操作時,某些不滿足需求的條件會不執行,而條件之間的連接字符(and,or)會導致sql語法錯誤。

<!-- trim: 提供前後綴,覆蓋功能 -->

<!-- prefix: trim標籤包裹的部分前添加指定內容 -->

<!-- suffix: trim標籤包裹的部分後添加指定內容 -->

<!-- prefixOverrides: 表示移除第一個滿足條件的字段 -->

<!-- suffixOverrides : 表示移除最後一個滿足條件的字段(,)-->

 

4. <foreach>

場景:批量操作。常用於in後(類似java中的for循環)

<!-- in: 子查詢 -->

<!-- collection: 參數類型可以爲數組,集合以及map,當參數類型爲map時,寫入的參數需爲map中的keymap.put(abcd,zzzz)即寫入abcd,此時參數不可亂寫)-->

<!-- item: 表示循環體中具體對象 -->

<!-- index: list和數組中,index是元素的序號,在map中,index是元素的key-->

<!-- open: 表示該語句以什麼開始 -->

<!-- separator: 每次循環元素之間的分隔符 -->

<!-- close: trim標籤包裹的部分後添加指定內容 -->

 

5. <bind>

場景:預定義變量,在查詢語句中使用;

<!-- value: 預定義的值 -->

 

 

逆向工程生成代碼解析

<!-- criterion.valid: 傳入的條件有效 -->

<!-- criterion.noValue: 當條件不符合標準的時候 - -->

<!-- criterion.singleValue:  條件是一個值的時候 調用此條件 -->

<!-- "criterion.betweenValue: 條件是兩個值的時候 調用此條件 -->

 

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