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>
但是你会发现报错了,PersistenceException
、UnsupportOperationException
。
因为list.size用#{}是取不出来的,需要用${}
,把#
换成$
就可以了。
使用#{}
能够有效防止SQL注入,但是也有它的缺点,它会把传入的数据自动加上一个双引号,所以如果要的是数字的话,就会比较尴尬。
而${}可以直接解析出原本的数据,所以需要数值比较的话,还是要加${}
。
分类:
后端 / mybatis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2021-10-18 Pycharm 常用快捷键大全