【MyBatis】8、动态SQL

MyBatis 动态SQL

使用动态 SQL 可简化代码的开发,减少开发者的工作量,程序可以自动根据业务参数来决定SQL的组成

if 标签

<select id="findByAccount" parameterType="com.mybatistest.entity.Account" resultType="com.mybatistest.entity.Account">
    select * from t_account where
    <if test="id != 0">
        id = #{id}
    </if>
    <if test="username != null">
        and username = #{username}
    </if>
    <if test="password != null">
        and password = #{password}
    </if>
    <if test="age != 0">
        and age = #{age}
    </if>
</select>

if 标签可以自动根据表达式的结果是否将对应的语句添加到 SQL 中,如果条件不成立则不添加,如果条件成立则添加。

where 标签

<select id="findByAccount" parameterType="com.mybatistest.entity.Account" resultType="com.mybatistest.entity.Account">
    select * from t_account
    <where>
        <if test="id != 0">
            id = #{id}
        </if>
        <if test="username != null">
            and username = #{username}
        </if>
        <if test="password != null">
            and password = #{password}
        </if>
        <if test="age != 0">
            and age = #{age}
        </if>
    </where>
</select>

where 标签可以自动判断是否要删除语句块中的 and 关键字,如果检测到 where 直接跟 and 拼接,则自动删除 and,通常情况下 if 和 where 结合起来使用。

choose、when 标签(标签内部的规则 和 java 中的 switch 对应,满足中间的一个 choose 即跳转

<select id="findByAccount" parameterType="com.mybatistest.entity.Account" resultType="com.mybatistest.entity.Account">
    select * from t_account
    <where>
        <choose>
            <when test="id != 0">
                id = #{id}
            </when>
            <when test="username != null">
                and username = #{username}
            </when>
            <when test="password != null">
                and password = #{password}
            </when>
            <when test="age != 0">
                and age = #{age}
            </when>
        </choose>
    </where>
</select>

上面的代码作用和用 if-where 标签写的代码作用不一致

trim 标签

trim 标签的 prefix 和 suffix 属性会被用于生成实际的 SQL 语句,会和标签内部的语句进行拼接,如果语句前后出现了 prefixOverrids 或者 suffixOverrids 属性中指定的值,MyBatis 框架会自动将其删除。

<select id="findByAccount" parameterType="com.mybatistest.entity.Account" resultType="com.mybatistest.entity.Account">
    select * from t_account
    <trim prefix="where" prefixOverrides="and">
        <if test="id != 0">
            id = #{id}
        </if>
        <if test="username != null">
            and username = #{username}
        </if>
        <if test="password != null">
            and password = #{password}
        </if>
        <if test="age != 0">
            and age = #{age}
        </if>
    </trim>
</select>

上面的代码作用和用 if-where 标签写的代码作用一致

set 标签用于 update 操作,会自动根据参数选择生成 SQL 语句

<update id="update" parameterType="com.mybatistest.entity.Account">
    update t_account
    <set>
        <if test="username != null">
            username = #{username},
        </if>
        <if test="password != null">
            password = #{password},
        </if>
        <if test="age != 0">
            age = #{age}
        </if>
    </set>
    where id = #{id}
</update>

foreach 标签

foreach 标签可以迭代生成一系列的值,这个标签主要用于 SQL 的 in 语句。

<select id="findByIds" parameterType="com.mybatistest.entity.Account" resultType="com.mybatistest.entity.Account">
    SELECT * FROM t_account
    <where>
        <foreach collection="ids" open="id in (" close=")" item="id" separator=",">
            #{id}
        </foreach>
    </where>
</select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值