zoukankan      html  css  js  c++  java
  • Mybatis 常用标签

    MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

    1、<if>

    主要用于sql语句拼接(很简单)如示例

    2、<choose,when,otherwise>

    有些时候,我们不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。

    结构如下:

    复制代码
    <choose>
    
    <when test=" ** ">
    
    <when>
    
    <otherwise>
    
    </otherwise>
    
    </choose>
    复制代码

    3<where,set>

    复制代码
    <update id="updateAuthorIfNecessary">
      update Author
        set
          <if test="username != null">username=#{username},</if>
          <if test="password != null">password=#{password},</if>
          <if test="email != null">email=#{email},</if>
          <if test="bio != null">bio=#{bio}</if>
      where id=#{id}
    </update>
    复制代码

    当我们这样写sql时会出现以下问题

     如果这些条件没有一个能匹配上将会怎样?最终这条 SQL 会变成这样:

     update Author
        set
    
    username=#{username},password=#{password},
    where id=#{id}
    会报错
    解决方法有2中
    1.加<where ,set>标签
    2.<trim>标签

    4、<trim>标签

    trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码:

      1、

     

    复制代码
     select * from user 
    
      <trim prefix="WHERE" prefixoverride="AND |OR">
    
        <if test="name != null and name.length()>0"> AND name=#{name}</if>
    
        <if test="gender != null and gender.length()>0"> AND gender=#{gender}</if>
    
      </trim>
    复制代码

      假如说name和gender的值都不为null的话打印的SQL为:select * from user where    name = 'xx' and gender = 'xx'

      在红色标记的地方是不存在第一个and的,上面两个属性的意思如下:

      prefix:前缀      

      prefixoverride:去掉第一个and或者是or

      2、

      

    复制代码
    update user
    
      <trim prefix="set" suffixoverride="," suffix=" where id = #{id} ">
    
        <if test="name != null and name.length()>0"> name=#{name} , </if>
    
        <if test="gender != null and gender.length()>0"> gender=#{gender} ,  </if>
    
      </trim>
    复制代码

      假如说name和gender的值都不为null的话打印的SQL为:update user set name='xx' , gender='xx'     where id='x'

      在红色标记的地方不存在逗号,而且自动加了一个set前缀和where后缀,上面三个属性的意义如下,其中prefix意义如上:

      suffixoverride:去掉最后一个逗号(也可以是其他的标记,就像是上面前缀中的and一样)

      suffix:后缀

    5、<foreach>

    动态 SQL 的另外一个常用的必要操作是需要对一个集合进行遍历,通常是在构建 IN 条件语句的时候

    foreach 元素的功能是非常强大的,它允许你指定一个集合,声明可以用在元素体内的集合项和索引变量。它也允许你指定开闭匹配的字符串以及在迭代中间放置分隔符。这个元素是很智能的,因此它不会偶然地附加多余的分隔符。

    注意 你可以将任何可迭代对象(如列表、集合等)和任何的字典或者数组对象传递给foreach作为集合参数。当使用可迭代对象或者数组时,index是当前迭代的次数,item的值是本次迭代获取的元素。当使用字典(或者Map.Entry对象的集合)时,index是键,item是值。

    
    
     
    我终生的等待,换不来你刹那的凝眸。 想要体面生活,又觉得打拼辛苦;想要健康身体,又无法坚持运动。人最失败的,莫过于对自己不负责任,连答应自己的事都办不到,又何必抱怨这个世界都和你作对?人生的道理很简单,你想要什么,就去付出足够的努力。
  • 相关阅读:
    macOS 遇到 svnadmin无法使用的情况
    语音识别进化简史:从造技术到建系统
    你是什么垃圾?人工智能面对干垃圾和湿垃圾“有点蒙”
    垃圾分类的事,让机器人做去吧!
    怎样才能叫一只奶牛自愿挤奶?
    第一次,脑机接口可以实时读取人类语言了
    机器人工作原理的超详细解析,生动、形象!
    1900页数学基础:面向CS的线性代数、拓扑、微积分和最优化
    微软Azure AI负责人:OpenAI只在微软云上训练模型
    Velodyne收购高清地图公司 将研发更安全的ADAS系统
  • 原文地址:https://www.cnblogs.com/yf2196717/p/11972940.html
Copyright © 2011-2022 走看看