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>

猜你喜欢

转载自blog.csdn.net/weixin_43941676/article/details/108570499