SpringBoot使用MyBatis時(shí)的幾種傳參規(guī)范示例
使用Mybatis作為持久層框架時(shí),對(duì)于數(shù)據(jù)庫的增刪改查等操作都需要參數(shù)的傳遞,這里學(xué)習(xí)記錄一下MyBatis中可用的參數(shù)傳遞方式。
1. 單個(gè)簡(jiǎn)單參數(shù)傳遞
使用 MyBatis 傳遞單個(gè)參數(shù)時(shí)比較簡(jiǎn)單,形式如#{a},#,#{param1}等都可以在 MyBatis 中獲取到唯一參數(shù),但是參數(shù)名盡量和入?yún)⒚恢?,這樣更符合開發(fā)規(guī)范。
Mapper 文件定義
UserInfo selectById(String userId);
xml 文件定義
- 單個(gè)參數(shù)時(shí),標(biāo)簽中可不定義參數(shù)類型
<select id="selectByUserId" resultType="com.shone.entity.UserInfo">
select user_id, user_name from user_info where user_id=#{userId}
</select>2. 匿名參數(shù)順序傳遞
匿名參數(shù)傳遞時(shí)使用的是 MyBatis 中索引傳遞的方式,對(duì)于傳遞的多個(gè)參數(shù),在sql語句標(biāo)簽中使用#{param1}、#{param2}等索引依次代表傳入的參數(shù)值。
Mapper 文件
- 使用匿名參數(shù)傳遞時(shí),接口中定義的方法參數(shù)無需使用注解
UserInfo selectByNameAndAge(String userName, Integer age);
xml 文件
- xml中讀取參數(shù)時(shí)可以使用使用arg0, arg1, param1, param2等形式
- 參數(shù)有多個(gè)類型且匿名,因此不需要指定入?yún)㈩愋?/li>
- Mapper中沒有使用注解,因此直接使用參數(shù)名時(shí)會(huì)報(bào)錯(cuò)參數(shù)名找不到
<select id="selectByNameAndAge" resultType="com.shone.entity.UserInfo">
select user_id, user_name from user_info where user_name=#{param1} and user_gender=#{param2}
</select>- 匿名參數(shù)傳遞方法可讀性差,對(duì)后期維護(hù)不友好,不符合開發(fā)規(guī)范。
3. 使用@Param注解傳遞
@Param注解用于指定key,指定了key之后,在sql標(biāo)簽中可以使用key來索引對(duì)應(yīng)的參數(shù)值。
Mapper 文件
- 接口中定義時(shí)使用 @Param注解指定參數(shù)對(duì)應(yīng)的key
UserInfo selectByNameAndAge(@Param("userName") String userName, @Param("age") Integer age);xml 文件
- 不需要指定傳入?yún)?shù)類型
- 使用注解指定的key就可以獲取到對(duì)應(yīng)入?yún)⒅?/li>
<select id="selectByNameAndAge" resultType="com.shone.entity.UserInfo">
select user_id, user_name from user_info where user_name=#{userName} and user_gender=#{age}
</select>@Param注解傳參使用時(shí)清晰簡(jiǎn)潔明了,符合開發(fā)規(guī)范,在參數(shù)較少時(shí)建議使用該方式。
4. 使用Map傳遞參數(shù)
MyBatis框架底層就是將入?yún)⑥D(zhuǎn)換成Map類型進(jìn)行傳遞的,因此我們也可以使用Map進(jìn)行參數(shù)的傳遞,傳入的參數(shù)在sql標(biāo)簽中可以根據(jù)Map中的key值直接獲取。
使用時(shí),需要將傳入的參數(shù)放入到map中
map.put("userName","tom");
map.put("gender",1);Mapper 文件
UserInfo selectByNameAndAge(Map<String, Object> map);
xml 文件
- 入?yún)㈩愋椭付镸ap
<select id="selectByNameAndAge" resultType="com.shone.entity.UserInfo" paramterType="map">
select user_id, user_name from user_info where user_name=#{userName} and user_gender=#{age}
</select>使用Map傳遞參數(shù)符合MyBatis底層的設(shè)計(jì),性能也沒有問題,但是在開發(fā)中由于將所有值封裝成為map,無法直觀看到map中可能含有的參數(shù),在后期維護(hù)上不太友好。
5. 使用JavaBean(POJO)傳遞
除了Map方式,還可以使用JavaBean的方式來傳遞多個(gè)參數(shù),此時(shí)在sql標(biāo)簽中直接使用bean對(duì)象的屬性來索引參數(shù)值,注意bean對(duì)象中 需要有相應(yīng)參數(shù)的get方法,否則無法正常獲取。
使用javabean作為參數(shù),需要先定義JavaBean
@Data
public class UserInfo {
private String userName;
private Integer age;
}Mapper 文件
UserInfo selectByEntity(UserInfo userInfo);
xml 文件
- 指定入?yún)㈩愋蜑橄鄳?yīng)的JavaBean全路徑限定類名
<select id="selectByNameAndAge" resultType="com.shone.entity.UserInfo" paramterType="com.shone.entity.UserInfo">
select user_id, user_name from user_info where user_name=#{userName} and user_gender=#{age}
</select>JavaBean的參數(shù)傳遞方式更符合項(xiàng)目開發(fā)的規(guī)范,實(shí)際使用時(shí)簡(jiǎn)潔明了,在參數(shù)較多時(shí)建議使用這種方式,創(chuàng)建JavaBean來作為參數(shù)傳遞對(duì)象。
6. 使用List、Array、Set傳遞
List、Array、Set等方式的傳參通常用于sql標(biāo)簽中的in操作,即用于MyBatis中的標(biāo)簽。
使用list或array時(shí),一般是做in操作,只有一個(gè)參數(shù)。
Mapper 文件
UserInfo selectByIdList(List<String> userIdList);
xml 文件
- 不需要指定入?yún)㈩愋?,或指定為L(zhǎng)ist
- 使用標(biāo)簽處理sql中的in操作
- 如果參數(shù)是list,則collection為list;如果參數(shù)類型是array,則collection是array
- 如果是多個(gè)參數(shù)或者是對(duì)象的屬性值作為list,則傳參應(yīng)為map/bean類型,collection應(yīng)為對(duì)象屬性中的list
<select id="selectByIdList" resultMap="userResultMap">
select * from user_info where status=1
and user_id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>到此這篇關(guān)于SpringBoot使用MyBatis時(shí)的幾種傳參規(guī)范示例的文章就介紹到這了,更多相關(guān)SpringBoot MyBatis 傳參內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
EasyExcel實(shí)現(xiàn)讀取excel中的日期單元格并自動(dòng)判定終止讀取
這篇文章主要為大家詳細(xì)介紹了EasyExcel如何實(shí)現(xiàn)讀取excel中的日期單元格并自動(dòng)判定終止讀取,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11
Java數(shù)據(jù)類型實(shí)現(xiàn)自動(dòng)與強(qiáng)制轉(zhuǎn)換的示例代碼
Java數(shù)據(jù)類型之間的轉(zhuǎn)換有自動(dòng)轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換,這篇文章主要給大家介紹Java數(shù)據(jù)類型如何實(shí)現(xiàn)自動(dòng)轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換,需要的朋友可以參考下2023-05-05
Java調(diào)用Zookeeper的實(shí)現(xiàn)步驟
本文主要介紹了Java調(diào)用Zookeeper的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
詳解SpringBoot2 使用Spring Session集群
這篇文章主要介紹了SpringBoot2 使用Spring Session集群,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-04-04
在SpringBoot中使用JWT的實(shí)現(xiàn)方法
這篇文章主要介紹了在SpringBoot中使用JWT的實(shí)現(xiàn)方法,詳細(xì)的介紹了什么是JWT和JWT實(shí)戰(zhàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
Java 實(shí)戰(zhàn)練手項(xiàng)目之酒店管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)酒店管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11
springboot整合ehcache和redis實(shí)現(xiàn)多級(jí)緩存實(shí)戰(zhàn)案例
這篇文章主要介紹了springboot整合ehcache和redis實(shí)現(xiàn)多級(jí)緩存實(shí)戰(zhàn)案例,從源碼角度分析下多級(jí)緩存實(shí)現(xiàn)原理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08

