当前位置: 代码迷 >> 综合 >> MyBatis在SQL语句中取list的大小
  详细解决方案

MyBatis在SQL语句中取list的大小

热度:32   发布时间:2023-10-24 08:53:57.0

需求:使用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 idFROM table_namewhere 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注入,但是也有它的缺点,它会把传入的数据自动加上一个双引号,所以如果要的是数字的话,就会比较尴尬。

而${}可以直接解析出原本的数据,所以需要数值比较的话,还是要加${}。


喜欢本文的朋友不要忘记点一个免费的赞哦,你的赞将是我最大的动力。

  相关解决方案