Mybatis动态SQL之使用 foreach 标签
foreach 标签对 list 和 数组 是友好操作的:
不管是 增删改查 都可以使用,以下是以查询为例子
情况一:遍历对象中集合属性
入参/参数:对象
出参/返回值:集合对象
实体类:
dao/mapper接口
<!-- 这是dao/mapper中的方法 List<Person> selectAll(Person per);-->
XML文件
<select id="selectAll" resultMap="包名.Person" parameterType="包名.Person"> SELECT * FROM PerSon where id in <foreach collection="hobby" item="item" index="index" separator="," open="(" close =")"> #{item} </foreach> </select>
案例1:
出参/返回值:集合对象
入参/参数:集合
目的:为什么怎么写呢 ?这样写效率高,这是mybatis在效率方面的升级
<!-- 这是dao/mapper中的方法 List<MyFile> selectById(@Param("abc") List<String> list);-->
<select id="selectById" resultMap="BaseResultMap" parameterType="String"> SELECT * FROM file where id in <foreach collection="abc" item="item" index="index" separator="," open="(" close =")"> #{item} </foreach> </select>
注意点: @Param 是给当前参数 起的别名,若果参数特别长,用这个注解起别名是非常有效的
Collection 就是参数名,当然如果使用注解指定,必须写别名
item 遍历当前集合,集合中的 值 名称,当然如果你愿意,你可以书写 aaa等
index 遍历集合中的下标名
separator 分隔符是什么,就是 逗号 怎么解释呢? in(1,2,3) 这是 in 条件
open 开始
close 结束
案例2:
出参/返回值:集合对象
入参/参数:集合对象
<!-- 这是dao/mapper中的方法 List<MyFile> selectById(@Param("abc") List<user> users);--> <select id="selectById" resultMap="BaseResultMap" parameterType="user"> SELECT * FROM file where id in <foreach collection="abc" item="item" index="index" separator="," open="(" close =")"> #{item.user的属性名} </foreach> </select>