SpringBoot整合Mybatis之动态SQL

一、概念

Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能。它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。

二、if 标签

if标签可通过test属性的表达式进行判断,若表达式的结果为true,则标签中的内容会执行,繁殖标签中的内容不会执行。

<!-- List<Dish> getDishByName(@Param("name") String name);-->
<select id="getDishByName" resultType="com.athorse.entities.Dish">
   select * from dish where 1=1
   <if test="name != null and name != ">
      and name like "%"#{name}"%"
   </if>
</select>

三、choose标签

choose标签作用条件判断来拼接指定的条件,它和if不太相同,choose似类于java中的switch语句用法,直要有条件成立,其它判断将得不到执行,如果所有条件都不成立则执行otherwise标签中的内容。 格式: <choose>   <when test=条件1>     执行的代码;   </when> <when test=条件2>     执行的代码;   </when>   ......   <otherwise>    执行的代码;   </when>   </otherwise> </choose>

四、foreach标签

1. 常用属性

collection:设置需要循环的数组或集合

item:表示数组或集合中的每一个数据

separator:循环体之间的分隔符

open:foreach标签所循环的所有内容的开始符

close:foreach标签所循环的所有内容的结束符

2. 批量删除方式一

<!--Integer deleteMore(@Param("ids") long[] ids);-->
    <delete id="deleteMore">
        delete from dish where id in
        <foreach collection="ids" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>
    </delete>

3. 批量删除方式二

<!--Integer deleteMore(@Param("ids") long[] ids);-->
    <delete id="deleteMore">
        delete from dish where (
        <foreach collection="ids" item="id" separator="or" >
            id = #{id}
        </foreach>
        )
    </delete>

4. 批量新增

<insert id="insertBatch">
        insert into dish(name,category_id,price,code,image,description,sort) values
        <foreach collection="dishes" item="dish" separator=",">
            (#{dish.name},#{dish.categoryId},#{dish.price},#{dish.code},#{dish.image},#{dish.description},#{dish.sort})
        </foreach>
    </insert>
经验分享 程序员 微信小程序 职场和发展