时间:2021-05-19
foreach语句中, collection属性的参数类型可以使:List、数组、map集合
collection: 必须跟mapper.java中@Param标签指定的元素名一样
item : 表示在迭代过程中每一个元素的别名,可以随便起名,但是必须跟元素中的#{}里面的名称一样。
close :后缀
#{}是预编译处理,KaTeX parse error: Expected 'EOF', got '#' at position 20: …符串替换。mybatis在处理#̲{}时,会将sql中的#{}替…{}时,就是把${}替换成变量的值。使用#{}可以有效的防止SQL注入,提高系统安全性。
例如:
# 是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id =‘1'.
$ 是将传入的数据直接显示生成sql语句,eg:select id,name,age from student where id =${id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id = 1.
(1)$ 符号一般用来当作占位符,常使用Linux脚本的人应该对此有更深的体会吧。既然是占位符,当然就是被用来替换的。知道了这点就能很容易区分$和#,从而不容易记错了。
(2)预编译的机制。预编译是提前对SQL语句进行预编译,而其后注入的参数将不会再进行SQL编译。我们知道,SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作。而预编译机制则可以很好的防止SQL注入。
其中useType=“2,3”;这样的写法,看似很简单,但是MyBatis不支持。。但是MyBatis中提供了foreach语句实现IN查询
正确的写法有以下几种写法:
(一)、selectByIdSet(List idList)
List<User> selectByIdSet(List idList); <select id="selectByIdSet" resultMap="BaseResultMap"> SELECT <include refid="Base_Column_List" /> from t_user WHERE id IN <foreach collection="list" item="id" index="index" open="(" close=")" separator=","> #{id} </foreach></select>(二)、List selectByIdSet(String[] idList)
如果参数的类型是Array,则在使用时,collection属性要必须指定为 array
List<User> selectByIdSet(String[] idList); <select id="selectByIdSet" resultMap="BaseResultMap"> SELECT <include refid="Base_Column_List" /> from t_user WHERE id IN <foreach collection="array" item="id" index="index" open="(" close=")" separator=","> #{id} </foreach></select>(三)、参数有多个时
当查询的参数有多个时,有两种方式可以实现,一种是使用@Param(“xxx”)进行参数绑定,另一种可以通过Map来传参数。
3.1 @Param(“xxx”)方式
List<User> selectByIdSet(@Param("name")String name, @Param("ids")String[] idList); <select id="selectByIdSet" resultMap="BaseResultMap"> SELECT <include refid="Base_Column_List" /> from t_user WHERE name=#{name,jdbcType=VARCHAR} and id IN <foreach collection="idList" item="id" index="index" open="(" close=")" separator=","> #{id} </foreach></select>3.2 Map方式
Map<String, Object> params = new HashMap<String, Object>(2);params.put("name", name);params.put("idList", ids);mapper.selectByIdSet(params); <select id="selectByIdSet" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from t_user where name = #{name} and ID in <foreach item="item" index="index" collection="idList" open="(" separator="," close=")"> #{item} </foreach> </select>到此这篇关于mybatis使用foreach语句实现IN查询(三种)的文章就介绍到这了,更多相关mybatis foreach 查询内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
PHP中遍历数组有三种常用的方法:一、使用for语句循环遍历数组;二、使用foreach语句遍历数组;三、联合使用list()、each()和while循环遍历
在做mybatis的mapper.xml文件的时候,我们时常用到这样的情况:动态生成sql语句的查询条件,这个时候我们就可以用mybatis的foreach了f
mybatis模糊查询的实现方法mybatis的逆向助手确实好用,可以省去很多编写常规sql语句的时间,但是它没办法自动生成模糊查询语句,但开发中模糊查询是必不
mybatis的foreach标签经常用于遍历集合,构建in条件语句或者批量操作语句。下面是foreach标签的各个属性属性描述collection表示迭代集合
MyBatis3.X复杂Sql查询MyBatis3.X的resultMap1.Mybatis的sql语句返回的结果有两种resultType查询出的字段在相应的