1.查询语句
@Select({"<script> select * from user where name in( <foreach collection='list' item='name' separator=','> #{name} </foreach>) </script>"}) @Result(property="userId",column="user_id") List<UserVo> listById(List<String> name);
2.批量删除语句
<!--
需求: 批量删除多个数据
难点: 如果使用#{集合}获取的是集合对象的整体.删除无效.
思路: 将数组拆分为单个数据. 可以通过遍历的方式操作
语法: mybatis为了参数取值方便,特意封装了遍历的标签 foreach
关于标签参数说明:
<foreach collection=""></foreach>
1.如果传递的参数是数组, 则collection="array"
2.如果传递的参数是list集合, 则collection="list"
3.如果传递的参数是Map集合, 则collection="map中的key"
标签属性说明:
1.collection 集合的名称
2.item 每次遍历的数据的形参变量
3.open 循环的开始标签
4.close 循环的结束标签
5.index 循环遍历下标 一般不用
6.separator 循环遍历的分割符
-->
<delete id="deleteIds">
delete from demo_user where id in (
<foreach collection="array" item="id" separator=",">
#{id}
</foreach>
)
</delete>
或者注解的形式
@delete({" <script>
delete from user where id in(
<foreach collection="list" item="id" separator=",">
#{id}
</foreach>)
</script>
"})
int deleteById(List<Integer> id);
3.Mybatis 批量删除语句
mapper: int deleteById(List<String> userId); mapper.xml: <delete id="deleteById"> delete from cart where user_id in( <foreach collection="list" item="userId" separator=","> #{userId} </foreach> ) </delete> Controller : @PostMapping("/delete") @ApiOperation("删除") public String deleteById(@RequestParam(value = "cartDTO",required=false) List<String> cartDTO){ service.deleteById(cartDTO); return "删除成功!"; }
4.Mybatis 批量查询
mapper : List<CartVo> selectById(List<String> userId); mapper.xml : <select id="selectById" resultMap="ResMap"> select * from cart where user_id in <foreach collection="list" item="userId" open="(" separator="," close=")"> #{userId} </foreach> </select> 测试 : @Test void textCart02() { List<String> list = new ArrayList<>(); list.add("刻晴"); list.add("可莉"); List<CartVo> cartVos = mapper.selectById01(list); cartVos.forEach(System.out::println); }
以上都是用于List 方式 ,当然跟上面相同的方式还有 Array 方法 也是比较相同的
还有一个类似的Map方式