Mybatis的动态sql简介与代码示例

1. 动态sql的好处

动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。
注意:xml中特殊符号如 ” , > , < 等这些都需要使用转义字符

2. 动态sql之:if、where

  1. if 用于完成简单的判断.
  2. where用于解决SQL语句中where关键字以及条件前面的and或者or的问题

正确示例:

<select id="getByUser" resultType="user">
        select * from users
        <where>
            <if test="id != null and id != '' ">
                and id=#{id}
            </if>
            <if test="username != null and username != '' ">
                and username like concat('%',#{username},'%')
            </if>
            <if test="birthday != null ">
                and birthday = #{birthday}
            </if>
            <if test="sex != null and sex !=''">
                and sex = #{sex}
            </if>
            <if test="address != null and address !=''">
                and address like concat('%',#{address},'%')
            </if>
        </where>
    </select>

在这里插入图片描述

在这里插入图片描述

错误示范(没有where标签):

在这里插入图片描述
在这里插入图片描述

3.动态sql之: trim

trim 可以在条件判断完的SQL语句前后添加或者去掉指定的字符

  • prefix: 添加前缀
  • prefixOverrides: 去掉前缀
  • suffix: 添加后缀
  • suffixOverrides: 去掉后缀

示例
在这里插入图片描述
在这里插入图片描述

4. 动态sql之:set

主要是用于解决修改操作中SQL语句中可能多出逗号的问题

使用示例:

在这里插入图片描述
在这里插入图片描述

不用set标签的示例 :

在这里插入图片描述

5.动态sql之: choose、when、otherwise

choose 主要是用于分支判断,类似于java中的switch case,只会满足所有分支中的一个

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 动态sql之:foreach

1)foreach 主要用于循环迭代

  • collection: 要迭代的集合
  • item: 当前从集合中迭代出的元素
  • open: 开始字符
  • close:结束字符
  • separator: 元素与元素之间的分隔符
  • index:
    • 迭代的是List集合: index表示的当前元素的下标
    • 迭代的Map集合: index表示的当前元素的key

示例:
在这里插入图片描述
这里注意Mapper接口参数列表要加@Param

/**
     * 测试foreach
     *
     * @param ids
     * @return {@code List<User>}
     */
    List<User> testForeach(@Param("ids") List<Integer> ids);

在这里插入图片描述

7.动态sql之: sql、include

sql 标签是用于抽取可重用的sql片段,将相同的,使用频繁的SQL片段抽取出来,单独定义,方便多次引用.
include就是来引用sql标签

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值