【JavaEE / MyBatis】MyBatis 中的动态 SQL 的相关使用方法

        动态 SQL:

1. <if>标签:

2. <trim>标签

3. <where>标签

4. <set>标签

5. <foreach>标签 

6. <include>标签


动态SQL 是Mybatis的强⼤特性之⼀,能够完成不同条件下不同的 sql 拼接。

1. <if> 标签:

        Mapper.xml实现:

<insert id="insertByCondition">
        insert into userinfo (username, password, age
        <if test="gender != null">
            , gender
        </if>
        ) values (#{username}, #{password}, #{age}
        <if test="gender != null">
            , #{gender}
        </if>
        )
    </insert>

2. <trim>标签

  • prefix:表示整个语句块,以prefix的值作为前缀

  • suffix:表示整个语句块,以suffix的值作为后缀

  • prefixOverrides:表示整个语句块要去除掉的前缀

  • suffixOverrides:表示整个语句块要去除掉的后缀

        Mapper.xml实现:

<insert id="insertByCondition">
        insert into userinfo
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="username!=null">
                username,
            </if>
            <if test="password !=null">
                password,
            </if>
            <if test="age !=null">
                age,
            </if>
            <if test="gender != null">
                gender
            </if>
        </trim>
        values
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="username!=null">
                #{username},
            </if>
            <if test="password !=null">
                #{password},
            </if>
            <if test="age !=null">
                #{age},
            </if>
            <if test="gender !=null">
                #{gender}
            </if>
        </trim>
    </insert>

在以上sql动态解析时,会做如下处理:

  • 基于prefix配置,开始部分加上 (
  • 基于suffix配置,结束部分加上 )
  • 多个组织的语句都以 逗号 结尾,在最后拼接好的字符串还会以 逗号 结尾,会基于suffixOverrides配置去掉最后一个 逗号

注解实现方式(不推荐):

@Insert("<script>" +
            "insert into userinfo " +
            "<trim prefix='(' suffix=')' suffixOverrides=','> " +
            "    <if test='username!=null'>username,</if> " +
            "    <if test='password !=null'>password,</if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值