2.14 Mybatis——动态sql

目录

1. if

2. choose(when, otherwise)

3.  Where(if)——常用

4. 自定义 trim

5. Set——动态更新语句

6.  Foreach——对集合进行遍历


根据不同条件拼接 SQL 语句

Mybatis动态sql常用元素:

                用于查询语句:if

                                        choose(when, otherwise)

                                        Where(if)、trim

                用于修改语句:Set——动态更新语句

                对集合进行遍历:Foreach

1. if

(1)特点:顺序执行,满足条件的都会按需拼接。

(2)缺点:若where后没有已有字段,拼接语句第一个字段和where之间会有and,导致sql语句错误。

<select id="getStudentIf" parameterType="com.zx.pojo.Student" resultType="com.zx.pojo.Student">
        select * from t_student where name=#{name}
        <if test="pwd!=null">
            and pwd=#{pwd}
        </if>
</select>

2. choose(when, otherwise)

(1)特点:类似switch选择语句,前面有条件满足,后面的内容不再执行,只拼接最近满足一个。若when内的都不满足,会将otherwise的内容拼接上去。

(2)缺点:和if元素一样,若where后没有已有字段,拼接语句第一个字段和where之间会有and,导致sql语句错误。

 <select id="getStudentChoose" parameterType="com.zx.pojo.Student" resultType="com.zx.pojo.Student">
        select * from t_student where sex="男"
        <choose>
            <when test="name!=null">
               and name=#{name}
            </when>
            <when test="pwd!=null">
                and pwd=#{pwd}
            </when>
            <otherwise>
                and age=#{age}
            </otherwise>
        </choose>
</select>

3.  Whereif)——常用

(1)特点:where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除

<!--
        where(if):若有条件满足会自动拼接where,并且会将第一个满足条件前的and自动覆盖掉,然后将其他满足条件的按序拼接在后面。
        where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。
    -->
    <select id="getStudentWhere" parameterType="com.zx.pojo.Student" resultType="com.zx.pojo.Student">
        select * from t_student
        <where>
            <if test="name!=null">
                and name=#{name}
            </if>
            <if test="pwd!=null">
                and pwd=#{pwd}
            </if>
        </where>
    </select>

4. 自定义 trim

(1)特点:与where(if)功能类似,可自行定义。

(2)属性:prefix  前缀

           prefixOverrides  前缀覆盖

           suffix  后缀

           suffixOverrides   后缀覆盖

(3)缺点:相对where(if)而言,稍繁琐。

 <select id="getStudentTrim" parameterType="com.zx.pojo.Student" resultType="com.zx.pojo.Student">
        select * from t_student
            <trim prefix="WHERE" prefixOverrides="and |or">
                <if test="name!=null">
                    and name=#{name}
                </if>
                <if test="pwd!=null">
                    and pwd=#{pwd}
                </if>
            </trim>
 </select>

5. Set——动态更新语句

(1)特点:set 元素会动态地插入 SET 关键字,并会删掉额外的逗号(这些逗号是在使用条件语句给列赋值时引入的)。

(2)功能:用于动态更新语句。

<update id="update" parameterType="com.zx.pojo.Student">
        update t_student
            <set>
                <if test="name!=null">
                    name=#{name},
                </if>
                <if test="pwd!=null">
                    pwd=#{pwd},
                </if>
            </set>
        where id=#{id}
</update>

6.  Foreach——对集合进行遍历

(1)属性:

                item  声明可以在元素体内使用的集合项

                index

                collection  迭代体

                open  指定开头字符串以及

                separator  指定集合项迭代之间的分隔符

                close  指定结尾的字符串

(2)特点:可以将任何可迭代对象(如 List、Set 等)、Map 对象或者数组对象作为集合参数传递给 foreach

<select id="getUserForeach" parameterType="java.util.List" resultType="com.zx.pojo.Student">
        select * from t_student where id in
        <foreach collection="array" item="arr" open="(" separator="," close=")">
            #{arr}
        </foreach>
</select>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值