天天看點

MyBatis接收多個參數,其中一個參數是集合,另一個參數是字元串的解決辦法

周報 2020-09-14

上周我按照詳細設計編寫代碼,在這個過程中,我碰到了一個關于MyBatis架構的問題。當接口中抽象方法有兩個參數,并且其中一個參數是集合,另一個參數是字元串,這種情況下,在xml檔案中的parameterType應該如何寫才能正确接收到參數。我在網際網路上查詢了之後又問了前輩,最終解決了問題,那就是将他們封裝到HashMap中,在parameterType中接受Map類型的參數,然後使用Map的key來取出資料,使用動态SQL的foreach标簽對list進行周遊。

接口

<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)


           

接口方法

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>
           

繼續閱讀