动态SQL

一、动态SQL
(一)、if
    if经常用在动态拼接查询SQL的动态条件,新增或修改的SQL的只新增或修改不为空的属性。
    <if test="表达式"> SQL语句 </if>
 
(二)、where
where 元素只有在一个以上的if条件有值的情况下才去插入“WHERE”子句。而且,若最后的内容是“AND”或“OR”开头的,where 元素也会合理处理
    <where>
        <if></if>
        <if></if>
        ...
    </where>
    
where+if

(三)、choose, when, otherwise
有些时候,我们不想用到所有的条件语句,而只想从中择其一。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句/if...else if...else。
    <choose>
        <when test="表达式">
            SQL语句
        </when>
        <when test="表达式">
            SQL语句
        </when>
        <otherwise>
            SQL语句
        </otherwise>
    </choose>

 where + choose, when, otherwise 搭配使用
(四)、trim

trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀,或者添加“)“等后缀,可用于选择性插入、更新、删除或者条件查询等操作。

| 属性            | 描述                                                         |
| --------------- | ------------------------------------------------------------ |
| prefix          | 给sql语句拼接的前缀                                          |
| suffix          | 给sql语句拼接的后缀                                          |
| prefixOverrides | 去除sql语句前面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的开头为"AND",trim标签将会去除该"AND" |
| suffixOverrides | 去除sql语句后面的关键字或者字符,该关键字或者字符由suffixOverrides属性指定 |

    <trim prefix="values (" suffix=")" suffixOverrides=",">
        <if></if>
        <if></if>
    </trim>

(五)、set
当在 update 语句中使用if标签时,如果前面的if没有执行,则或导致逗号多余错误。使用set标签可以将动态的配置 SET 关键字,并剔除追加到条件末尾的任何不相关的逗号。使用 if+set 标签修改后,如果某项为 null 则不进行更新,而是保持数据库原值。
    <set>
        <if></if>
        <if></if>
        ...
    </set>
    
(六)、foreach
动态 SQL 的另外一个常用的必要操作是需要对一个集合进行遍历,通常是在构建 IN 条件语句的时候。

<!--
collection:用于获取接口的参数名(需要@Param),  item:迭代项,  index:索引
open:开始符号   close:结束符号  separator:分割符
-->
<foreach collection="ids" item="item" index="index"
         open="(" separator="," close=")">
    
</foreach>


二、多表关系映射
(一)、关联  user(多) -- role
关联处理“有一个”类型的关系。主要用在"多对一"或"一对一"的关系中,取出"一"
    <association></association>
        property 类中指向"一"的属性;
        javaType 指定property指定属性的类型
        column   指定关联的列名,外键
        select   指定查询关联的"一"的sql语句的id

(二)、集合
主要用在一对多的关系中,取出"多"
    <collection></collection>
        property 类中指向"多"的属性;
        javaType 指定property指定属性的类型(java.util.ArrayList)
        column   指定关联的列名
        select   指定查询关联的"多"的sql语句的id

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值