Mybatis(ParameterType)傳遞多個(gè)不同類(lèi)型的參數(shù)方式
Mybatis傳遞多個(gè)不同類(lèi)型的參數(shù)
在一些場(chǎng)景下,傳參是需要多個(gè)參數(shù)的。一個(gè)參數(shù)不太夠用,如:parameterType="ImGroup"。
最開(kāi)始的想法是封裝一個(gè)專(zhuān)用用來(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)查詢(xún) ? ? ?* @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)文章
SpringBoot如何實(shí)現(xiàn)同域SSO(單點(diǎn)登錄)
單點(diǎn)登錄(SingleSignOn,SSO),就是通過(guò)用戶(hù)的一次性鑒別登錄。即在多個(gè)應(yīng)用系統(tǒng)中,只需要登錄一次,就可以訪問(wèn)其他相互信任的應(yīng)用系統(tǒng),本文將介紹SpringBoot如何實(shí)現(xiàn)同域SSO(單點(diǎn)登錄)2021-05-05Spring SpringMVC在啟動(dòng)完成后執(zhí)行方法源碼解析
這篇文章主要介紹了SpringMVC在啟動(dòng)完成后執(zhí)行方法源碼解析,還是非常不錯(cuò)的,在這里分享給大家,需要的朋友可以參考下。2017-09-09IDEA錯(cuò)誤:找不到或無(wú)法加載主類(lèi)的完美解決方法
使用IDEA開(kāi)始就一直在搭建java環(huán)境,許久沒(méi)有使用過(guò)java,剛開(kāi)始有些生疏,先建了一個(gè)最簡(jiǎn)單的類(lèi)可是運(yùn)行的時(shí)候出現(xiàn)錯(cuò)誤:找不到或無(wú)法加載主類(lèi),下面這篇文章主要給大家介紹了關(guān)于IDEA錯(cuò)誤:找不到或無(wú)法加載主類(lèi)的完美解決方法,需要的朋友可以參考下2022-07-07Mybatis中的config.xml配置文件詳細(xì)解析
這篇文章主要介紹了詳解Mybatis-config.xml配置文件,需要的朋友可以參考下2017-12-12Spring Boot的listener(監(jiān)聽(tīng)器)簡(jiǎn)單使用實(shí)例詳解
監(jiān)聽(tīng)器(Listener)的注冊(cè)方法和 Servlet 一樣,有兩種方式:代碼注冊(cè)或者注解注冊(cè)。接下來(lái)通過(guò)本文給大家介紹Spring Boot的listener(監(jiān)聽(tīng)器)簡(jiǎn)單使用,需要的朋友可以參考下2017-04-04Java ES(Elasticsearch) 中的and 和 or 查
Elasticsearch 是一個(gè)分布式、高擴(kuò)展、高實(shí)時(shí)的搜索與數(shù)據(jù)分析引擎,es中match查詢(xún)中,查詢(xún)字符串分詞后,默認(rèn)是or或者的關(guān)系,這篇文章主要介紹了ES 中的and 和 or 查詢(xún),需要的朋友可以參考下2022-11-11這么優(yōu)雅的Java ORM沒(méi)見(jiàn)過(guò)吧!
這篇文章主要介紹了Java ORM的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2021-01-01