需求:使用MyBatis进行开发时,在一个SQL语句中需要拼接list的大小。
大家都知道,当我们在MyBatis中写SQL时,如果需要遍历list,先对list进行非空判断的时候,可以加下面这行:
<if test="null != list and list.size != 0">SQL</if>
但是如果想在SQL中取到list.size
的值,则比较麻烦。一般会想到如下:
<select id="getArticleIdByTags" parameterType="java.util.List" resultType="java.lang.Integer">
SELECT id
FROM table_name
where 1=1
<foreach collection="list" item="item" open="AND" separator="OR" close="GROUP BY id HAVING COUNT(*) >=">
field1 = #{item.a} AND field2 = #{item.b}
</foreach>
#{list.size}
</select>
但是你会发现报错了,PersistenceException
、UnsupportOperationException
。
因为list.size用#{}是取不出来的,需要用${}
,把#
换成$
就可以了。
使用#{}
能够有效防止SQL注入,但是也有它的缺点,它会把传入的数据自动加上一个双引号,所以如果要的是数字的话,就会比较尴尬。
而${}可以直接解析出原本的数据,所以需要数值比较的话,还是要加${}
。
转载自https://www.jianshu.com/p/9d542c65c32c
标签:语句,list,中取,SQL,MyBatis,size From: https://www.cnblogs.com/echohye/p/18473914