MyBatis接收多个参数,其中一个参数是集合,另一个参数是字符串的解决办法

周报 2020-09-14

上周我按照详细设计编写代码,在这个过程中,我碰到了一个关于MyBatis框架的问题。当接口中抽象方法有两个参数,并且其中一个参数是集合,另一个参数是字符串,这种情况下,在xml文件中的parameterType应该如何写才能正确接收到参数。我在互联网上查询了之后又问了前辈,最终解决了问题,那就是将他们封装到HashMap中,在parameterType中接受Map类型的参数,然后使用Map的key来取出数据,使用动态SQL的foreach标签对list进行遍历。

接口

public List<XXXBean> getXXXBeanList(HashMap map);  

<select id="getXXXBeanList" parameterType="hashmap" resultType="XXBean">

  select 字段... from XXX where id=#{xxId} code = #{xxCode}  

</select>  

其中hashmap是mybatis自己配置好的直接使用就行。map中key的名字是那个就放在#{}中。
具体例子

封装一个 list 和 一个字符串到map中

List<String> list = new ArrayList<>();
//网址
list.add("https://www.baidu.com");
list.add("https://www.bilibili.com");
//网址类型
String siteTag = "https";

HashMap<String,Object> map = new HashMap<>();
//封装map,一会需要使用这里定义的key进行数据接收
map.put("list", list);
map.put("siteTag",siteTag)


接口方法

public List<SysWeb> getSysInfo(Map<String, Object>);

mapper.xml

以下xml代码意思是查询网络类型是https,但是除了百度和bilibili两个网站的其他网站。

<select id="getSysInfo" parameterType="java.util.Map" resultType="SysWeb">
	SELECT
   	t.sysSiteId, t.siteName, t1.mzNum as siteTagNum, t1.mzName as siteTag, t.url, t.iconPath
 	FROM 
  		TD_WEB_SYSSITE t
  	LEFT JOIN
  		TD_MZ_MZDY t1 on t1.mzNum = t.siteTag and t1.mzType = 10
  	WHERE 
  		t.siteTag = #{siteTag} and t.sysSiteId not in 
  <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
     #{item}
  </foreach>
</select>
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值