关闭

关于mybatis的传参问题

标签: javamybatissqlstring
226人阅读 评论(0) 收藏 举报
分类:

问题描述:mybatis中写sql时,用到 id in(#{s})这样的语句,传参数时直接传的String s = "12,34,45",传入之后,执行sql,发现结果只找出了第一个数即12的记录,34,45的记录被过滤了。

类似这一种用到in()的语句,传参时正确的写法应该如下:

方法一: 传入list

findByIds(List<Long> ids)
       1.1 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list

       Xml代码  收藏代码
  1. <select id="findByIdsMap" resultMap="BaseResultMap">  
  2.  Select  
  3.  <include refid="Base_Column_List" />  
  4.  from jria where ID in  
  5.  <foreach item="item" index="index" collection="list" open="(" separator="," close=")">  
  6.   #{item}  
  7.  </foreach>  
  8. </select> 

 

方法二:传入数组

findByIds(Long[] ids)
     1.2 如果参数的类型是Array,则在使用时,collection属性要必须指定为 array

     Xml代码  收藏代码
  1. <select id="findByIdsMap" resultMap="BaseResultMap">  
  2. select  
  3. <include refid="Base_Column_List" />  
  4. from tabs where ID in  
  5. <foreach item="item" index="index" collection="array" open="(" separator="," close=")">  
  6.  #{item}  
  7. </foreach>  
  8. </select> 

 

 

方法三:将sql语句中的#{s}写法改为${s}

这种错误,当参数s只有一个数时,结果是正确的,所以如果没有多个值,就很难发现问题的潜在问题,希望大家以后注意这样的错误。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:14100次
    • 积分:259
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:19篇
    • 译文:0篇
    • 评论:1条
    最新评论