周報 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>