动态SQL使用
1 if 使用
多条件查询的条件的追加
2 where 使用
where 包含了两个 if,而第一个 if 中没有 and,where 标签会自动检查状态,如果标签返回的第一个匹配内容是以 and 或 or 开头的,则会自动删除 and 或者 or ,然后再追加 where。
3 sql 片段的使用
4 foreach 标签使用
批量删除
// 对应接口
Integer delete(@Param(value = "ids") int[] ids);
// UserMapper.xml文件
<delete id="delete">
delete from user where id in
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
foreach 的主要用在构建 in 条件中,它可以在 SQL 语句中进行迭代一个集合。
foreach 元素的属性主要有 item, index, collection, open, separator,
close。
- item 表示集合中每一个元素进行迭代时的别名
- index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置
- open 表示该语句以什么开始
- separator 表示在每次进行迭代之间以什么符号作为分隔符
- close 表示以什么结束
collection 属性是在使用 foreach 的时候最关键的也是最容易出错的,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下 3 种情况:
(1)如果传入的是单参数且参数类型是一个 List 的时候, collection 属性值为 list .
(2)如果传入的是单参数且参数类型是一个 array 数组的时候, collection 的属性值为 array .
(3)如果传入的参数是多个的时候,我们就需要把它们封装成一个 Map 了,当然单参数也可以封装成 map,实际上如果你在传入参数的时候,在 MyBatis 里面也是会把它封装成一个 Map 的,map 的 key 就是参数名,所以这个时候 collection 属性值就是传入的 List 或 array 对象在自己封装的 map 里面的 key.
5 choose when标签使用
Choose when 类似于 java 中的 switch case,只会走一个,一般是在有一个条件固定的情况下,需要额外不确定的条件时,使用 choose 的方式。
6 sql动态拼接
<mapper namespace="com.java201.dao.DeptMapper">
<insert id="add">
insert into dept (dept_name, dept_desc) values (#{deptName},#{deptDesc})
</insert>
<update id="update" parameterType="Dept">
update dept
<set>
<if test="deptName != null">
dept_name=#{deptName},
</if>
<if test="deptDesc != null">
dept_desc=#{deptDesc}
</if>
</set>
where id=#{id}
</update>
<delete id="delete">
delete from dept where id=#{id}
</delete>
<select id="findAll" resultType="com.java201.pojo.Dept">
select * from dept order by id desc
</select>
<select id="findById" resultType="com.java201.pojo.Dept">
select * from dept where id=#{id}
</select>
<select id="find" resultType="com.java201.pojo.Dept">
select * from dept where id > 0 and dept_name like concat(concat('%',#{deptName},'%'))
</select>
<select id="find2" resultType="com.java201.pojo.Dept">
select * from dept where id > 0
<if test="deptName != null and deptName != ''">
and dept_name like concat(concat('%',#{deptName},'%'))
</if>
<if test="deptDesc != null and deptDesc.trim() != ''">
and dept_desc like concat(concat('%',#{deptDesc},'%'))
</if>
</select>
</mapper>
模糊查询的使用:
dept_name like concat(concat(’%’,#{deptName},’%’))
dept_name like concat(’%’,#{deptName},’%’)
6.1 批量删除
Integer deleteAll(@Param(“array”) int[] ids);
<update id="deleteAll">
update dynamic set dynamic_state=1 where dynamic_id in
<foreach collection="array" item="dynamic_id" separator="," open="(" close=")">
#{dynamic_id}
</foreach>
</update>
@PostMapping("/dynamic/deleteAllByids")
@ResponseBody
@ApiOperation(tags = "lxy:批量删除正文", value = "批量删除")
@ApiImplicitParam(paramType = "query",name = "ids",value = "要删除的多个id",required = true,dataType = "string",allowMultiple=true)
public JsonResult deleteAllByids(int[] ids){
Integer integer = dynamicService.deleteAll(ids);
return new JsonResult(200,"success",integer);
}