Javaweb之Mybatis的动态SQLforeach和include的详细解析
2024-01-10 06:37:59
3.3 动态SQL-foreach
案例:员工删除功能(既支持删除单条记录,又支持批量删除)
SQL语句:
delete from emp where id in (1,2,3);
Mapper接口:
@Mapper
public interface EmpMapper {
? ?//批量删除
? ?public void deleteByIds(List<Integer> ids);
}
XML映射文件:
-
使用
<foreach>
遍历deleteByIds方法中传递的参数ids集合
<foreach collection="集合名称" item="集合遍历出来的元素/项" separator="每一次遍历使用的分隔符" ? ? ? ? open="遍历开始前拼接的片段" close="遍历结束后拼接的片段"> </foreach>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
? ? ? ?PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
? ? ? ?"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper">
? ?<!--删除操作-->
? ?<delete id="deleteByIds">
? ? ? delete from emp where id in
? ? ? ?<foreach collection="ids" item="id" separator="," open="(" close=")">
? ? ? ? ? #{id}
? ? ? ?</foreach>
? ?</delete>
</mapper>
3.4 动态SQL-sql&include
问题分析:
-
在xml映射文件中配置的SQL,有时可能会存在很多重复的片段,此时就会存在很多冗余的代码
我们可以对重复的代码片段进行抽取,将其通过<sql>
标签封装到一个SQL片段,然后再通过<include>
标签进行引用。
-
<sql>
:定义可重用的SQL片段 -
<include>
:通过属性refid,指定包含的SQL片段
SQL片段: 抽取重复的代码
<sql id="commonSelect">
select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time from emp
</sql>
然后通过<include>
标签在原来抽取的地方进行引用。操作如下:
<select id="list" resultType="com.itheima.pojo.Emp">
? ?<include refid="commonSelect"/>
? ?<where>
? ? ? ?<if test="name != null">
? ? ? ? ? name like concat('%',#{name},'%')
? ? ? ?</if>
? ? ? ?<if test="gender != null">
? ? ? ? ? and gender = #{gender}
? ? ? ?</if>
? ? ? ?<if test="begin != null and end != null">
? ? ? ? ? and entrydate between #{begin} and #{end}
? ? ? ?</if>
? ?</where>
? order by update_time desc
</select>
文章来源:https://blog.csdn.net/qq_69748833/article/details/135492199
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!