• 后端——框架——持久层框架——Mybatis——《Mybatis从入门到精通》读书笔记——第四章节(动态标签)


      本章介绍SQL的动态标签,常用的有三种类型,其他的都归在杂项

    1. 分支:if,[choose,when,otherwise。
    2. 循环:foreach。
    3. 格式:trim,where,set。
    4. 杂项:databaseId,bind。

    1、分支

    1.1 If

    表格1- 1 if标签

    名称

    If

    描述

    与编程语言中的单If语句相同。通常用于where条件,insert,update语句中列的判断。

    属性

    Test:指定分支的条件

    格式

    <if test=””>sql</if>

    示例

    根据姓名模糊查询用户:

    <if test=”userName != null”>

        and user_name like concat("%",#{userName} ,"%")

    <if>

    1.2 choose,when,otherwise

    表格1- 2 choose,when,otherwise

    名称

    Choose,when,otherwise

    描述

    与编程语言中的if,elseif,else格式相同。含义稍微有些区别,

    l  choose标签无任何意义。

    l  When标签对应if,每个test对应分支的条件,多个when之间并不存在if,elseif之间的关系。彼此都是独立的,相当于写了多个if。

    l  Otherwise标签与else格式含义相同,当上述中所有when的分支都不满足时,执行otherwise,并不对应具体的when分支。

    属性

    只有when标签存在test属性,与if标签的test属性含义相同,值为分支的条件。

    格式

    <choose>

       <!—1到多个when标签 -->

       <when test=””></when>

       <!—只能存在一个-->

       <otherwise></otherwise>

    </choose>

    2、循环

    表格2- 1 foreach

    名称

    foreach

    描述

    用于循环拼接SQL语句,常用于拼接in条件,批量插入的语句。在整个循环过程中,都是一条SQL语句。

    属性

    collection:指定集合的类型,值一般为list或map

    Open:在循环之前,添加一个前缀。

    close:在循环结束之后,添加一个后缀

    separator:每次循环结束之后,添加一个分隔符,例如insert中的逗号

    Item:当collection表示list时,相当于定义一个临时变量,在标签内部使用此变量,当collection表示map时,临时变量的值为map每次循环的value值。

    Index:当collection表示list时,值为数字,表示当前循环的索引值。当collection表示map时,值为字符串,表示当前map的key值。

    格式

    <foreach collection= "list" open= "(" close= ")" separator="," item=" " index=””>

       Sql片段

    </foreach>

    示例

    批量插入多个用户,为了简便只写了两个属性id,name,可以根据自身需求添加任何其他属性

    <foreach collection= "list" open= "(" close= ")" separator="," item="user">

             (#{user.id},#{user.name})

    </foreach>

    3、格式

    3.1 Trim

                                                           表格3- 1 trim标签

    名称

    trim

    描述

    用于去掉SQL语句中多余的前缀和后缀,注意整个过程中,都是一条SQL语句。

    属性

    prefix:指定语句片段的前缀,例如拼接where条件时,WHERE作为前缀

    prefixOverrides:去除多余的前缀,一般值都是 and | or,容易在拼接SQL语句时产生多余的and和or

    suffix:指定语句片段的后缀。

    suffixOverrides:去除多余的后缀,一般都是逗号,在批量插入时,去除最后一个逗号。

    格式

    <trim prefix= "where" prefixOverrides=”” suffix=”” suffixOverrides=””>

       Sql片段

    </trim>

    示例

    等价<where>

    <trim prefix= "where" prefixOverrides=”and | or”>

       Sql片段

    </trim>

    等价<set>

    <trim prefix= "set" suffixOverriders=”,”>

       Sql片段

    </trim>

    3.2 where

    表格3- 2 where标签

    名称

    Where标签

    描述

    Where标签对应SQL片段中的where条件,包含在where标签内部的SQL片段会自动去除多余的and,or前缀

    属性

    格式

    <where></where>

    3.3 Set

                                                          表格3- 3 set标签

    名称

    set标签

    描述

    Set标签对应更新SQL中的set片段。包含在set标签内部的SQL片段会自动去除多余的逗号。

    属性

    格式

    <set>

       <if test=”fieldName!=null”>columnName = #{fieldName},</if>

    </set>

    其中fieldName为Java类中属性的名称,columnName对应表的列名。最后的逗号不可省略。

    4、杂项

    4.1 bind标签

    表格4- 1 bind标签

    名称

    bind

    描述

    bind标签用于定义一个临时变量,在之后的SQL语句中可以引用此变量,类似其他配置文件中的property,只不过它不可以引入properties文件。

    属性

    name:变量的名称

    Value:变量的值

    格式

    <bind name=”” value=””></bind>,它的作用域不是整个Mapper文件,而是某个SQL语句的标签内部。例如where标签内。

    4.2 databaseId属性

    表格4- 2 databsaeId属性

    名称

    databaseId

    描述

    它对应于config配置文件中的databaseIdProvider,用于区分数据库的类型。

    在Mapper配置文件中,它与id作为联合主键,与接口中的方法一一对应,例如存在select标签,它的id为selectById,默认情况下它与接口中的selectById方法对应,当指定databaseId时,当数据库类型为Mysql时,会执行databaseId为mysql,id为selectById的SQL,当为oracle时,会执行databaseid为oracle,id为selectById的SQL。默认id是唯一的,添加databaseId后,databaseId与id的组合是唯一的。

    它不是一个标签,而是一个标签的属性。

    格式

    <select id=”selectById” databaseId=”mysql”></select> 数据库为mysql,执行

    <select id=”selectById” databaseId=”oracle”></select> 数据库为oracle,执行

  • 相关阅读:
    PLSQL中使用二维存储结构---二维数组
    重启并发管理器
    Jackson优化使用实例
    Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j)
    Java泛型简明教程
    理解JSON:3分钟课程
    java 电子书下载地址
    JAVA开发中相对路径,绝对路径全面总结
    Java关键字synchronized详解
    52 个超实用网站
  • 原文地址:https://www.cnblogs.com/rain144576/p/12228970.html
Copyright © 2020-2023  润新知