XML映射文件、Mybatis動態(tài)SQL

XML映射文件
規(guī)范:
XML映射文件的名稱與Mapper接口名稱一致,并且將XML映射文件和Mapper接口放置在相同包下(同包同名)。
XML映射文件的namespace屬性為Mapper接口全限定名一致。
XML映射文件中sql語句的id與Mapper 接口中的方法名一致,并保持返回類型一致。

XML映射文件:

MybatisX 是一款基于 IDEA 的快速開發(fā)Mybatis的插件,為效率而生。

使用Mybatis的注解,主要是來完成一些簡單的增刪改查功能。如果需要實(shí)現(xiàn)復(fù)雜的SQL功能,建議使用XML來配置映射語句。
官方說明:https://mybatis.net.cn/getting-started.html
官方文檔說道:
使用注解來映射簡單語句會使代碼顯得更加簡潔,但對于稍微復(fù)雜一點(diǎn)的語句,Java 注解不僅力不從心,還會讓你本就復(fù)雜的 SQL 語句更加混亂不堪。 因此,如果你需要做一些很復(fù)雜的操作,最好用 XML 來映射語句。
選擇何種方式來配置映射,以及認(rèn)為是否應(yīng)該要統(tǒng)一映射語句定義的形式,完全取決于你和你的團(tuán)隊(duì)。 換句話說,永遠(yuǎn)不要拘泥于一種方式,你可以很輕松的在基于注解和 XML 的語句映射方式間自由移植和切換。

小結(jié):
XML映射文件定義規(guī)范:
XML文件的名稱與Mapper接口名稱一致,并且放置在相同包下(同包同名)。
XML文件的namespace屬性為Mapper接口全限定名一致。
XML文件中sql語句的id與Mapper 接口中的方法名一致。

Mybatis動態(tài)SQL
動態(tài)SQL
隨著用戶的輸入或外部條件的變化而變化的SQL語句,我們稱為動態(tài)SQL。
<if>
<foreach>
<sql><include>

<if>
<if>:用于判斷條件是否成立。使用test屬性進(jìn)行條件判斷,如果條件為true,則拼接SQL。
<where>:where 元素只會在子元素有內(nèi)容的情況下才插入where子句。而且會自動去除子句的開頭的AND 或OR。

案例:完善更新員工功能,修改為動態(tài)更新員工數(shù)據(jù)信息
要求:動態(tài)更新員工信息,如果更新時(shí)傳遞有值,則更新;如果更新時(shí)沒有傳遞值,則不更新。
接口方法:
XML映射文件:
<set>:動態(tài)地在行首插入 SET 關(guān)鍵字,并會刪掉額外的逗號。(用在update語句中)

小結(jié):
<if>
用于判斷條件是否成立,如果條件為true,則拼接SQL。
形式:<if test="name != null">…</if>
<where>
where 元素只會在子元素有內(nèi)容的情況下才插入where子句,而且會自動去除子句的開頭的AND 或OR
<set>
動態(tài)地在行首插入 SET 關(guān)鍵字,并會刪掉額外的逗號。(用在update語句中)

<foreach>
SQL語句:
接口方法:
XML映射文件:
collection:集合名稱
item:集合遍歷出來的元素/項(xiàng)
separator:每一次遍歷使用的分隔符
open:遍歷開始前拼接的片段
close:遍歷結(jié)束后拼接的片段
測試方法:

<sql><include>

sql片段
<sql>:定義可重用的 SQL 片段。
<include>:通過屬性refid,指定包含的sql片段。

總結(jié)
1.XML映射文件
映射配置文件名與Mapper接口名一致,且放在相同的包下(同包同名)。
映射配置文件的namespace屬性與Mapper接口的全類名一致。
XML映射文件中sql語句的id與Mapper 接口中的方法名一致。
2.動態(tài)SQL
<if>
<where>
<set>
<foreach>
<sql>
<include>