Mybatis(ParameterType)傳遞多個(gè)不同類(lèi)型的參數(shù)方式
Mybatis傳遞多個(gè)不同類(lèi)型的參數(shù)
在一些場(chǎng)景下,傳參是需要多個(gè)參數(shù)的。一個(gè)參數(shù)不太夠用,如:parameterType="ImGroup"。
最開(kāi)始的想法是封裝一個(gè)專用用來(lái)當(dāng)參數(shù)的對(duì)象,把多個(gè)對(duì)象包裝到一起,這樣就要以實(shí)現(xiàn)多個(gè)參數(shù)的傳遞。
但是總感覺(jué)這樣的方法太笨了,而且封裝的對(duì)象有可能只能在參數(shù)這塊用一下,重用性不高。還會(huì)導(dǎo)致項(xiàng)目中多一個(gè)類(lèi)文件。
那么應(yīng)該還可以使用map或者list封裝對(duì)象。但是畢竟集合的可變性比較高,使用起來(lái)又沒(méi)有類(lèi)方便。
比起這些思路,我感覺(jué)注解的方式最方便。
基于注解
public List<ImGroup> selectImGroupListByUserId(@Param("userId")String userId, @Param("group") ImGroup imGroup);去掉parameterType屬性。
這里ImGroup 是一個(gè)對(duì)象,里面有一堆屬性,比如:name
<select id="getXXXBeanList" resultType="XXBean">
select t.* from tableName where id = #{userId} and name = #{group.name} ?
</select> ?由于是多參數(shù)那么就不能使用parameterType, 這里用@Param來(lái)指定哪一個(gè)
我的實(shí)際代碼如下 :
ImGroupMapper.java
? ?/**
? ? ?* 通過(guò)UserId來(lái)查詢
? ? ?* @param imGroup
? ? ?* @return
? ? ?*/
? ? public List<ImGroup> selectImGroupListByUserId(@Param("userId")String userId, @Param("group") ImGroup imGroup);ImGroupMapper.xml
?<select id="selectImGroupListByUserId" resultMap="ImGroupResult">
? ? ? ? select g.* from im_group_user gu left join im_group g on gu.group_id=g.group_id
? ? ? ? <where>
? ? ? ? ? ? gu.user_id=#{userId}
? ? ? ? ? ? <if test="group.userCount != null "> and g.user_count = #{group.userCount}</if>
? ? ? ? ? ? <if test="group.groupName != null ?and group.groupName != ''"> and g.group_name like concat('%', #{group.groupName}, '%')</if>
? ? ? ? ? ? <if test="group.groupIntroduction != null ?and group.groupIntroduction != ''"> and g.group_introduction = #{group.groupIntroduction}</if>
? ? ? ? ? ? <if test="group.groupPortrait != null ?and group.groupPortrait != ''"> and g.group_portrait = #{group.groupPortrait}</if>
? ? ? ? ? ? <if test="group.groupOwner != null ?and group.groupOwner != ''"> and g.group_owner = #{group.groupOwner}</if>
? ? ? ? ? ? <if test="group.groupManager != null ?and group.groupManager != ''"> and g.group_manager = #{group.groupManager}</if>
? ? ? ? </where>
? ? </select>Mybatis傳遞單個(gè)String類(lèi)型的參數(shù)
使用mybatis接口參數(shù)只有一個(gè)string的時(shí)候 如果不指定@Param 的話mybatis去會(huì)把parameterType參數(shù)默認(rèn)成接口的參數(shù)類(lèi)型然后對(duì)于xml里的#{a}參數(shù) 去調(diào)用該類(lèi)型下參數(shù)a 的get/set方法然后就報(bào)錯(cuò)了。
使用了@Param注解 mybatis就會(huì)一一對(duì)應(yīng)賦值就不會(huì)導(dǎo)致這個(gè)錯(cuò)誤。
接口如下:

xml文件如下:

報(bào)錯(cuò)如下:

改成如下就可以了:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用POI解析帶圖片的excel文件(簡(jiǎn)潔好用!)
這篇文章主要給大家介紹了關(guān)于Java如何使用POI解析帶圖片的excel文件的相關(guān)資料,最近項(xiàng)目需要讀取excel中的信息,帶圖片,所以這里給大家總結(jié)下,需要的朋友可以參考下2023-08-08
java版簡(jiǎn)單的猜數(shù)字游戲?qū)嵗a
猜數(shù)字游戲是一款經(jīng)典的游戲,該游戲說(shuō)簡(jiǎn)單也很簡(jiǎn)單,說(shuō)不簡(jiǎn)單確實(shí)也很難,那么下面這篇文章主要給大家介紹了java版簡(jiǎn)單的猜數(shù)字游戲的相關(guān)資料,文中給出了詳細(xì)的實(shí)現(xiàn)分析和示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來(lái)一起看看吧。2017-05-05
java代碼實(shí)現(xiàn)mysql分表操作(用戶行為記錄)
這篇文章主要介紹了java代碼實(shí)現(xiàn)mysql分表操作(用戶行為記錄),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Java基礎(chǔ)之JDK1.8新特性lambda表達(dá)式詳解
函數(shù)式接口有且僅有一個(gè)抽象方法,但是可以有多個(gè)非抽象方法的接口,函數(shù)式接口可以被隱式轉(zhuǎn)換為lambda表達(dá)式,這篇文章主要介紹了Java基礎(chǔ)之lambda表達(dá)式(JDK1.8新特性),需要的朋友可以參考下2023-08-08
解決springboot 連接 mysql 時(shí)報(bào)錯(cuò) using password: NO的方案
在本篇文章里小編給大家整理了關(guān)于解決springboot 連接 mysql 時(shí)報(bào)錯(cuò) using password: NO的方案,有需要的朋友們可以學(xué)習(xí)下。2020-01-01
SpringBoot @CompentScan excludeFilters配置無(wú)效的解決方案
這篇文章主要介紹了SpringBoot @CompentScan excludeFilters配置無(wú)效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Spring?Cloud?Gateway?整合?knife4j?聚合接口文檔功能
這篇文章主要介紹了Spring?Cloud?Gateway?整合?knife4j?聚合接口文檔的相關(guān)知識(shí),我們可以基于?Spring?Cloud?Gateway?網(wǎng)關(guān)?+?nacos?+?knife4j?對(duì)所有微服務(wù)項(xiàng)目的接口文檔進(jìn)行聚合,從而實(shí)現(xiàn)我們想要的文檔管理功能,需要的朋友可以參考下2022-02-02
解決idea中java出現(xiàn)無(wú)效的源發(fā)行版問(wèn)題
這篇文章主要給大家介紹了關(guān)于解決idea中java出現(xiàn)無(wú)效的源發(fā)行版問(wèn)題的相關(guān)資料,無(wú)效的源發(fā)行版是指IntelliJ IDEA無(wú)法正確識(shí)別和處理的源代碼版本,這可能是由于錯(cuò)誤的配置、缺少依賴項(xiàng)、不兼容的插件或其他問(wèn)題導(dǎo)致的,需要的朋友可以參考下2024-01-01

