mybatis in查询传入String方式
mybatis in查询传入string
在使用 mybaits 进行 in 查询时,传入string,如1,2,3,发现查询的结果并非我们想要的
这是因为#{}编译完自动加双引号“” 也就是变成in (“1,2,3”)
如果想要获得我们想要的结果,可以使用${},编译完是这样的 in (1,2,3)
例如,查询铃音库中多首铃音的总数量
<select id="getprogsresourcecount" resulttype="java.lang.long" parametertype="com.progandresource.entity.progsresourcecond"> select count(ring_no) from progandresmanage_ringinfo where valid_day > now() <if test="ringno != '' and ringno != null"> and ring_no in (${ringno}) </if> </select>
如果传入参数是list或者array,则直接用foreach即可
例如
<select id="getprogsresourcecount" resulttype="java.lang.long" parametertype="java.util.list"> select count(ring_no) from progandresmanage_ringinfo where valid_day > now() and ring_no in <foreach collection="list" item="item" index="index" open="(" close=")" separator=","> #{item, jdbctype=varchar} </foreach> </select>
mybatis in查询传入字符串参数
sql里的in操作符允许我们在where子句中规定多个值进行匹配。
语法:
select column_name(s) from table_name where column_name in (value1,value2,...);
在mybatis里,可以通过传入数组或容器(array、list、set、map)通过foreach标签来给in操作符指定参数。
问题:想要从org表中匹配字段org_id在or001、or002、or004中的数据,org_id是字符串类型的字段。
常规方法是在mapper.java中传入一个包含"or001"、“or002”、"or004"的list对象orgidlist,在xml中:
select * from org where org_id in <foreach item="orgid" index="index" collection="orgidlist" open="(" close=")" separator=","> #{orgid} </foreach>
如果要作为in的匹配参数的多个值在一个string类型的对象orgs中,想直接通过string传入,有两种实现方式。
1、在xml中用${orgs}把整个string作为sql的一部分
select * from org where org_id in (${orgs})
这种写法需要关注字符串orgs的内容在拼入之后,整个sql是否是符合语法的,按上面的需求和sql写法,就要求作为sql一部分的orgs的值为"‘or001',‘or002',‘or004'"。
参数直接以sql一部分的方式作为查询语句存在sql注入的风险,有一些项目可能会一刀切地限制开发者不允许用这种写法。
2、在xml的foreach标签里,传入collection属性时将字符串用split函数转为数组
select * from org where org_id in <foreach item="orgid" index="index" collection="orgs.split(',')" open="(" close=")" separator=","> #{orgid} </foreach>
在这里传入的orgs字符串的值可以为"or001,or002,or004",在调用split函数时设置","分格,可以直接切分出三个字符串作为数组的元素。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: Python绘制移动均线方法 含源代码
下一篇: [网鼎杯 2018]Fakebook
推荐阅读
-
MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)
-
MyBatis从入门到精通(三):MyBatis XML方式的基本用法之多表查询
-
mapper中String类型传入数据查询和对象传入查询区别
-
mybatis如何直接执行传入的任意sql语句,并按照顺序取出查询的结果集
-
mybatis 传参数几种方式+模糊查询【vaynexiao】
-
Mybatis传入 List<Map<String,Object>>的入参
-
Mybatis 查询返回List
集合 -
mybatis in 查询使用String做条件
-
JAVA框架——MyBatis总结(一)Mapper文件详解,动态代理方式,参数传入问题,结果返回问题
-
使用mybatis的interceptor修改执行sql以及传入参数方式