MyBatis在SQL语句中取list的大小

需求:使用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>

但是你会发现报错了,PersistenceExceptionUnsupportOperationException

因为list.size用#{}是取不出来的,需要用${},把#换成$就可以了。

使用#{}能够有效防止SQL注入,但是也有它的缺点,它会把传入的数据自动加上一个双引号,所以如果要的是数字的话,就会比较尴尬。

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

转载自https://www.jianshu.com/p/9d542c65c32c

posted @   槑孒  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
历史上的今天:
2021-10-18 Pycharm 常用快捷键大全
点击右上角即可分享
微信分享提示