动态SQL的使用

动态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。

  1. item 表示集合中每一个元素进行迭代时的别名
  2. index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置
  3. open 表示该语句以什么开始
  4. separator 表示在每次进行迭代之间以什么符号作为分隔符
  5. 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);
    }
发布了79 篇原创文章 · 获赞 7 · 访问量 1837

猜你喜欢

转载自blog.csdn.net/weixin_45044097/article/details/103138976
今日推荐