MyBatis学习07--动态sql语句if、where、foreach

1. sql标签

使用sql标签将重复的sql语句部分封装起来
在需要使用这个sql片段的地方,就用include标签引入就行了

    <sql id="select_all">
        select * from t_user
    </sql>

2. if标签

   <select id="findUserListByAddress" parameterType="string" resultType="User">
  
        <include refid="select_all"/>
        <!--
       加入一个判断,判断传入的address是否为空,使用if标签进行判断,该标签中的test属性就编写判断条件
        -->
        <if test="address != null">
            where address=#{address}
        </if>
    </select>

3. where标签

   <select id="findUserListByAddressAndSex" parameterType="User" resultType="User">
        <!--
        include标签引入sql标签中的sql语句
            refid填写的是sql标签的id
        -->
        <include refid="select_all"/>
        <!--
            where标签的作用:
                1. 可以在条件之前添加where关键字
                2. 可以去掉第一个条件前的and
        -->
        <where>
            <if test="address != null">
                and address=#{address}
            </if>

            <if test="sex != null">
                and sex=#{sex}
            </if>
        </where>
    </select>

4. foreach标签

    <delete id="deleteByIds" parameterType="int" >
        delete from t_user
        <!--
            将传入的集合中的数据遍历出来,放到()里面
            使用foreach标签遍历
                collection属性:要遍历的集合,如果要遍历的是一个List则写成list
                item属性: 遍历出来的每一个元素
                separator属性: 遍历出来的每一个元素之间的分隔符
                index属性: 遍历出来的每一个元素的索引
                open属性: 在遍历出来的第一个元素之前拼接字符串
                close属性: 在遍历出来的最后一个元素之后拼接字符串
        -->
        <foreach collection="list" item="id" separator="," open="where uid in(" close=")">
            #{id}
        </foreach>
    </delete>

总结:全部代码

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
    根标签mapper,一个映射配置文件,就对应一个dao接口
    根标签的namespace属性的值就对应dao接口的全限定名
-->

<mapper namespace="com.itheima.dao.UserDao">

    <!--
        使用sql标签将重复的sql语句部分封装起来
        在需要使用这个sql片段的地方,就用include标签引入就行了
    -->
    <sql id="select_all">
        select * from t_user
    </sql>



    <select id="findUserListByAddress" parameterType="string" resultType="User">
        <include refid="select_all"/>
        <!--
       加入一个判断,判断传入的address是否为空,使用if标签进行判断,该标签中的test属性就编写判断条件
        -->
        <if test="address != null">
            where address=#{address}
        </if>
    </select>



    <select id="findUserListByAddressAndSex" parameterType="User" resultType="User">
        <!--
        include标签引入sql标签中的sql语句
            refid填写的是sql标签的id
        -->
        <include refid="select_all"/>
        <!--
            where标签的作用:
                1. 可以在条件之前添加where关键字
                2. 可以去掉第一个条件前的and
        -->
        <where>
            <if test="address != null">
                and address=#{address}
            </if>

            <if test="sex != null">
                and sex=#{sex}
            </if>
        </where>
    </select>

    <delete id="deleteByIds" parameterType="int" >
        delete from t_user
        <!--
            将传入的集合中的数据遍历出来,放到()里面
            使用foreach标签遍历
                collection属性:要遍历的集合,如果要遍历的是一个List则写成list
                item属性: 遍历出来的每一个元素
                separator属性: 遍历出来的每一个元素之间的分隔符
                index属性: 遍历出来的每一个元素的索引
                open属性: 在遍历出来的第一个元素之前拼接字符串
                close属性: 在遍历出来的最后一个元素之后拼接字符串
        -->
        <foreach collection="list" item="id" separator="," open="where uid in(" close=")">
            #{id}
        </foreach>
    </delete>

</mapper>

posted @ 2021-08-09 00:32  秋吉  阅读(230)  评论(0编辑  收藏  举报