MyBatis中List等参数封装Map入参查询错误

将一个List和查询条件作为参数入参进行查询时,使用了Map封装,查询居然报错

深入查看后发现,在Mapper方法传参时使用了Map加@Param两个参数,

public List<Bill> selectBillListByCode_ProId_foreach_map(@Param("productCode")String productCode,Map<String, int> ProIdMap);

而xml文件SQL语句是

<select id="selectBillListByCode_ProId_foreach_map" resultMap="BillList">
  SELECT `billCode`,`productName` FROM `smbms_bill` WHERE `providerId`
  IN
  <foreach collection="MapKey" item="ProIdMap" open="(" separator="," close=")">
   #{ProIdMap}
  </foreach>
  <if test="productCode != null and productCode != ''">
   and `billCode` LIKE CONCAT ('%',#{productCode},'%')
  </if>
 </select>

本以为含Map多参数会和Map单参数一样不需要注解
所以此处会执行时会报错
正确写法是将方法的Map前加上@Param且在sql语句引用参数,Map前面需要加名称前缀

public List<Bill> selectBillListByCode_ProId_foreach_map(@Param("productCode")String productCode,Map<String, int> ProIdMap);

<select id="selectBillListByCode_ProId_foreach_map" resultMap="BillList">
  SELECT `billCode`,`productName` FROM `smbms_bill` WHERE `providerId`
  IN
  <foreach collection="map.MapKey" item="map.ProIdMap" open="("
   separator="," close=")">
   #{map.ProIdMap}
  </foreach>
  <if test="productCode != null and productCode != ''">
   and `billCode` LIKE CONCAT ('%',#{productCode},'%')
  </if>
 </select>

第二种方法,由于MyBatis接收参数时,无论参数数量,类型,都会将参数放入Map中,所以我们可以将所需的其他参数一并封装入Map

public List<Bill> selectBillListByCode_ProId_foreach_map(Map<String, Object> ProIdMap);

引用参数时是使用Map中的Key进行选择

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值