最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis之mapper接口多參數(shù)方式

 更新時(shí)間:2024年05月18日 15:06:52   作者:龍卷風(fēng)愛卷  
這篇文章主要介紹了Mybatis之mapper接口多參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Mybatis mapper接口多參數(shù)

mybatis mapper接口類可以通過(guò)五種方法接收多個(gè)參數(shù)

方法一:利用arg或param

利用arg或param獲取mapper接口類的多參數(shù)

arg可以通過(guò)#{arg0}、#{arg1}、#{arg2}…獲取接口中相對(duì)應(yīng)的參數(shù)

param可以通過(guò)#{param1}、#{param2}、#{param3}…獲取接口中相對(duì)應(yīng)的參數(shù)。

方法二:map

通過(guò)把參數(shù) 以鍵值對(duì) 的方式存儲(chǔ)到map集合中,然后把map集合作為mapper接口類的參數(shù),在mapper映射文件中編寫SQL語(yǔ)句需要調(diào)用參數(shù)值時(shí),可以通過(guò)map集合的key調(diào)用。

public List<User> findUserMap(Map<String, Object> parameterMap);
<select id="findUserMap" parameterType="map" resultType="user">
    <!-- concat:將多個(gè)字段連接起來(lái),組成新的字段 -->
    select id,username from user where id=#{id} and username like concat('%',#{username},'%')
</select>

方法三:通過(guò)Java Bean傳遞多個(gè)參數(shù)

通過(guò)把參數(shù)賦值給類對(duì)象的變量,然后把類對(duì)象作為mapper接口類的參數(shù),在mapper映射文件中編寫SQL語(yǔ)句需要調(diào)用參數(shù)值時(shí),可以通過(guò)類對(duì)象的變量名調(diào)用。

方法四:@Param()

通過(guò) @Param() 注解給參數(shù)加上key,在mapper映射文件中就可以通過(guò)key,所謂的key也就是@Param內(nèi)value中的值。

//mapper多參數(shù)傳入
User findUserOne(@Param(value = "username") String username, @Param("password") String password);

方法五:混合使用

在某些情況下可能需要混合使用幾種方法來(lái)傳遞參數(shù)。

舉個(gè)例子:

查詢一個(gè)角色,可以通過(guò)角色名稱和備注進(jìn)行查詢,與此同時(shí)還需要支持分頁(yè)

public List<Role> findByMix(@Param("params") RoleParams roleParams, @Param("page") PageParam PageParam);
<select id="findByMix" resultType="role">
    select id, role_name as roleName, note from t_role
    where role_name like concat('%', #{params.roleName}, '%') 
    and note like concat('%', #{params.note}, '%') 
    limit #{page.start}, #{page.limit}
</select>

解析

當(dāng)只傳一個(gè)參數(shù)時(shí),不需要@Param注解標(biāo)注key,可以省略

注意

  • 使用 map 傳遞參數(shù)導(dǎo)致了業(yè)務(wù)可讀性的喪失,導(dǎo)致后續(xù)擴(kuò)展和維護(hù)的困難,在實(shí)際的應(yīng)用中要果斷廢棄這種方式。
  • 使用 @Param 注解傳遞多個(gè)參數(shù),受到參數(shù)個(gè)數(shù)(n)的影響。當(dāng) n≤5 時(shí),這是最佳的傳參方式,它比用 Java Bean 更好,因?yàn)樗又庇^;當(dāng) n>5 時(shí),多個(gè)參數(shù)將給調(diào)用帶來(lái)困難,此時(shí)不推薦使用它。
  • 當(dāng)參數(shù)個(gè)數(shù)多于5個(gè)時(shí),建議使用 Java Bean 方式。
  • 對(duì)于使用混合參數(shù)的,要明確參數(shù)的合理性。

Mybatis mapper方法中綁定多個(gè)參數(shù)異常

1.mybatis mapper方法中綁定多個(gè)參數(shù)異常

問(wèn)題如圖所示:

代碼:

Integer selectByWriteOffStatus(@RequestParam ("id") String id, @RequestParam("mobileNo") String mobileNo, @RequestParam("writeOffStatus") String writeOffStatus);

錯(cuò)誤原因分析:

沒(méi)有加@Param注解,Mapper中的參數(shù)和xml中sql語(yǔ)句的參數(shù)沒(méi)有對(duì)應(yīng)起來(lái),所以會(huì)出現(xiàn)參數(shù)未找到的情況,導(dǎo)致執(zhí)行sql時(shí)無(wú)法辨識(shí)id字段

上圖使用注解不對(duì),應(yīng)該改為@Param

擴(kuò)展:

2.@requestParam與@Param區(qū)別:

1.@RequestParam 用于controller層,是Spring的注解

標(biāo)注在Controller層方法的參數(shù)上,用來(lái)解決前端與后端參數(shù)不一致的問(wèn)題。@RequestParam將請(qǐng)求參數(shù)和控制器方法的形參創(chuàng)建映射關(guān)系。

2.@Param 用于dao層,是mybatis中的注解

該注解標(biāo)注在dao接口中的方法參數(shù)上,用來(lái)簡(jiǎn)化xml配置的時(shí)候(比如Mybatis的Mapper.xml中的sql參數(shù)注入),@Param注解的作用是給參數(shù)命名,參數(shù)命名后就可以通過(guò) #{xxx} 的形式注入sql語(yǔ)句中(xxx為@Param給參數(shù)設(shè)置的名稱)。@Param注解是為了dao接口的方法參數(shù)和配置文件sql語(yǔ)句的參數(shù)保持變量名的一致性。

在mapper中如何傳遞多個(gè)參數(shù)

方法1:順序傳參法

public User selectUser(String name, int deptId);
<select id="selectUser" resultMap="UserResultMap">
    select * from user
    where user_name = #{0} and dept_id = #{1}
</select>

#{}里面的數(shù)字代表傳入?yún)?shù)的順序。

方法2:@Param注解傳參法

public User selectUser(@Param("userName") String name, int @Param("deptId") deptId);
<select id="selectUser" resultMap="UserResultMap">
    select * from user
    where user_name = #{userName} and dept_id = #{deptId}
</select>

#{}里面的名稱對(duì)應(yīng)的是注解@Param括號(hào)里面修飾的名稱。

方法3:Map傳參法

public User selectUser(Map<String, Object> params);
<select id="selectUser" parameterType="java.util.Map" resultMap="UserResultMap">
    select * from user
    where user_name = #{userName} and dept_id = #{deptId}
</select>

#{}里面的名稱對(duì)應(yīng)的是Map里面的key名稱。

方法4:Java Bean傳參法

public User selectUser(User user);
<select id="selectUser" parameterType="com.jourwon.pojo.User" resultMap="UserResultMap">
    select * from user
    where user_name = #{userName} and dept_id = #{deptId}
</select>

#{}里面的名稱對(duì)應(yīng)的是User類里面的成員屬性。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java獲取e.printStackTrace()打印的信息方式

    Java獲取e.printStackTrace()打印的信息方式

    這篇文章主要介紹了Java獲取e.printStackTrace()打印的信息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 如何將mybatis配置到springmvc中

    如何將mybatis配置到springmvc中

    為了更方便的連接數(shù)據(jù)庫(kù),將mybatis配置到springMVC中。接下來(lái)通過(guò)本文給大家分享如何將mybatis配置到springmvc中,需要的朋友參考下吧
    2017-11-11
  • Java Swing實(shí)現(xiàn)的定制TextField功能示例

    Java Swing實(shí)現(xiàn)的定制TextField功能示例

    這篇文章主要介紹了Java Swing實(shí)現(xiàn)的定制TextField功能,結(jié)合實(shí)例形式分析了java swing組件TextField相關(guān)屬性功能與設(shè)置操作技巧,需要的朋友可以參考下
    2018-01-01
  • java如何在項(xiàng)目中實(shí)現(xiàn)excel導(dǎo)入導(dǎo)出功能

    java如何在項(xiàng)目中實(shí)現(xiàn)excel導(dǎo)入導(dǎo)出功能

    這篇文章主要介紹了java如何在項(xiàng)目中實(shí)現(xiàn)excel導(dǎo)入導(dǎo)出功能的相關(guān)資料,EasyExcel是一個(gè)基于Apache?POI開發(fā)的開源Java庫(kù),用于簡(jiǎn)化Excel文件的讀寫操作,文中將用法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • java執(zhí)行shell命令及日志收集避坑指南分享

    java執(zhí)行shell命令及日志收集避坑指南分享

    這篇文章主要介紹了java執(zhí)行shell命令及日志收集避坑指南,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java如何實(shí)現(xiàn)支付寶電腦支付基于servlet版本

    Java如何實(shí)現(xiàn)支付寶電腦支付基于servlet版本

    這篇文章主要介紹了Java如何實(shí)現(xiàn)支付寶電腦支付基于servlet版本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java簡(jiǎn)單驗(yàn)證身份證功能示例

    Java簡(jiǎn)單驗(yàn)證身份證功能示例

    這篇文章主要介紹了Java簡(jiǎn)單驗(yàn)證身份證功能,涉及java針對(duì)字符串的截取、判斷相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • 使用bitset實(shí)現(xiàn)毫秒級(jí)查詢(實(shí)例講解)

    使用bitset實(shí)現(xiàn)毫秒級(jí)查詢(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇使用bitset實(shí)現(xiàn)毫秒級(jí)查詢(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 如何解決shardingsphere報(bào)錯(cuò)Missing?the?data?source?name:‘null‘

    如何解決shardingsphere報(bào)錯(cuò)Missing?the?data?source?name:‘null‘

    使用ShardingSphere進(jìn)行分庫(kù)操作時(shí),如果遇到“Missing?the?datasource?name:?‘null’”的錯(cuò)誤,通常是因?yàn)樗僮鞯谋頉](méi)有配置相關(guān)的路由信息,例如,如果在properties中僅配置了health_record和health_task的路由規(guī)則
    2024-11-11
  • 一個(gè)處理用戶登陸的servlet簡(jiǎn)單實(shí)例

    一個(gè)處理用戶登陸的servlet簡(jiǎn)單實(shí)例

    這篇文章主要介紹了一個(gè)處理用戶登陸的servlet簡(jiǎn)單實(shí)例,可通過(guò)servlet實(shí)現(xiàn)處理用戶登錄的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01

最新評(píng)論

织金县| 公安县| 常宁市| 永靖县| 进贤县| 屏山县| 望都县| 即墨市| 沁水县| 广饶县| 炉霍县| 元江| 姜堰市| 永德县| 赤城县| 苍南县| 大荔县| 五台县| 明水县| 金溪县| 仪陇县| 博白县| 洪湖市| 开封市| 上犹县| 汝阳县| 拜泉县| 大兴区| 稷山县| 黔西| 吉木乃县| 昌乐县| 九江市| 长海县| 昌江| 湾仔区| 永善县| 九寨沟县| 通江县| 静安区| 贵定县|