一、概念
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>