Mybatis
#{}和${}和區(qū)別
#{}:
- mybatis在處理的時候會將#{username} 處理成辜梳?,用于參數(shù)傳遞時占位
- 當(dāng)傳入的參數(shù)是字符串時抓艳,會自動加上''將傳遞的值括起來
- mapper接口方法中的參數(shù)與xml文件中是按照參數(shù)位置索引對應(yīng)的澎粟,不是根據(jù)參數(shù)的名稱码荔,但是建議最好一致。
${}:
- 字符串拼接
- mapper接口方法中的參數(shù)與xml文件中是按照參數(shù)位置索引對應(yīng)的,不是根據(jù)參數(shù)的名稱星压,但是建議最好一致。
- mybatis在處理的時候會直接拼接在傳遞的sql上鬼譬,不會生成占位的?
- 可以用于創(chuàng)建統(tǒng)一的方法娜膘,比如對所有表按照id查詢。
- select * from ${tableName} where id = #{id} -----> mybatis操作后:select * from student where id = '7dsj'
mybatis獲取方法參數(shù)
單值:
- 可以通過#{}或${}中間可以是任意名稱优质,但是需要注意${}的具體使用場景竣贪。
多個單值:
- mybatis會將所有參數(shù)放在一個map中,以兩種方式存儲
- 以arg0,arg1...為鍵巩螃,參數(shù)為值演怎。
- 以param1,param2...為鍵,參數(shù)為值避乏。
- 兩種方式目前看來只有索引位起始有差異
- 還是通過#{}或${}以鍵來訪問對應(yīng)的值
Map(對象同理爷耀,只不過獲取的是屬性):
- 通過#{}或${}以map中的鍵的方式來獲取值
@Param注解
- 命名參數(shù)
- 實(shí)際上取代了arg0,arg1,...的訪問方式,將其名稱改為了注解里設(shè)置的值,還是可以繼續(xù)用param1,param2,...
總結(jié):
- 其實(shí)一共可以歸結(jié)為2種情況
- 傳遞的參數(shù)是對象或者M(jìn)ap時拍皮,或者值時就用屬性名
- 其他情況可以用@Param注解來指定
動態(tài)SQL
if:
<if test = "屬性名 != null and 屬性名 != ''">
字段名 = #{屬性名}
</if>
注意:and的問題
where:用來解決沒有條件時歹叮,忽略where和解決拼接時產(chǎn)生的多余and或者or等此類的情況(只能去掉前面的and或or)
<wherr>
</where>
trim:
- prefix | suffix 將trim標(biāo)簽中內(nèi)容前面或后面添加指定內(nèi)容
- prefixOverrides | suffixOverrides 將trim標(biāo)簽中內(nèi)容前面或者后面的指定內(nèi)容去掉
- 若標(biāo)簽中沒有內(nèi)容,trim標(biāo)簽也不會起作用铆帽,where也不會生成
<trim prefix = "where" suffixOverrides = "and | or">
</trim>
choose咆耿、when、otherwise:相當(dāng)于if...else if...else
<where>
<choose>
<when test = "屬性名 != null and 屬性名 != ''">
字段名 = #{屬性名}
</when>
<when test = "屬性名 != null and 屬性名 != ''">
字段名 = #{屬性名}
</when>
...
<otherwise>
字段名 = xxxx
</otherwise>
</choose>
</where>
foreach:
- collection 集合類型
- 數(shù)組用array或者arg0爹橱,如果使用@Param指定了名稱萨螺,也可用自定義的名稱
- list用arg0、collection、list屑迂。如果使用@Param指定了名稱浸策,也可用自定義的名稱
- item 循環(huán)遍歷時的變量名稱
- separator 循環(huán)體之間的分隔符
- open 內(nèi)容的開始符號
- close 內(nèi)容的結(jié)束符號
<foreach collection = "array" item = "id" separator = "," open = "(" close = ")">
#{id}
</foreach>
<foreach collection = "list" item = "emp" separator = ",">
(#{emp.name},#{emp.age},#{emp.sex})
</foreach>
sql:
- 用來提取公共常用條件,比如經(jīng)常查詢的字段
- 定義:<sql id = "commonSelect">id,name,sex,address</sql>
- 使用:<include refid = "commonSelect"></include>