简单介绍:翻看以前在学校写的代码,发现那时候有一个sql写的很有意思,用到了 <set>标签,和我现在写的虽然有点差别,但是效果一样

代码:

 //mapper里的sql

<update id="updateEvent" parameterType="map">
  update event
  <set>
    <if test="title!=null and title!=''">
      title=#{title},
    </if>
    <if test="event!=null and event!=''">
      event=#{event}
    </if>
  </set>
  where id=#{id}
</update>
//mapper里的sql

<update id="updateEvent" parameterType="map">
  update event
    <trim prefix="set" suffixOverrides=",">
      <if test="title!=null and title!=''">
        title=#{title},
      </if>
      <if test="event!=null and event!=''">
        event=#{event},
      </if>
    </trim>
  where id=#{id}
</update>

 

解释属性,顺便再补充几个常用的属性:

  • prefix:给trim标签范围内的sql语句加上前缀,这个很灵活,比如说常见的:加上where条件 加上左括号 加上set 等等,下边会给例子的
  • suffix:给trim标签范围内的sql语句加上后缀,用法和上边差不多,他们两个可以说是一对,但是也可以有所不同
  • prefixOverrides:去除trim标签范围内多余的前缀内容
  • suffixOverrides:去除trim标签范围内多余的后缀内容,如:suffixOverrides=","就是用来去除trim标签内sql语句多余的后缀","
//insert sql

<insert id="insert" parameterType="Contract">
  insert into contract
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">id,</if>
      <if test="userId != null">user_id,</if>
      <if test="createDate != null">create_date,</if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">#{id,jdbcType=BIGINT},</if>
      <if test="userId != null">#{userId,jdbcType=BIGINT},</if>
      <if test="createTime != null">#{createDate,jdbcType=TIMESTAMP},</if>
    </trim>
  </insert>

//update sql

  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>

 

总结:我个人感觉来说,这两种写法花费的时间都差不多,但是第二种的能够处理不小心添加的逗号或者其他,规范性上感觉更加好一点吧。

mybatis mapper文件里的<set><trim>的更多相关文章

  1. Mybatis mapper文件占位符设置默认值

    如果要设置占位符默认值的话:需要进行 设置 org.apache.ibatis.parsing.PropertyParser.enable-default-value 属性为true启用占位符默认值处 ...

  2. MyBatis mapper文件中的变量引用方式#{}与${}的差别

    MyBatis mapper文件中的变量引用方式#{}与${}的差别 #{},和 ${}传参的区别如下:使用#传入参数是,sql语句解析是会加上"",当成字符串来解析,这样相比于$ ...

  3. [DB][mybatis]MyBatis mapper文件引用变量#{}与${}差异

    MyBatis mapper文件引用变量#{}与${}差异 默认,使用#{}语法,MyBatis会产生PreparedStatement中.而且安全的设置PreparedStatement參数,这个过 ...

  4. intellij idea 插件开发--快速定位到mybatis mapper文件中的sql

    intellij idea 提供了openApi,通过openApi我们可以自己开发插件,提高工作效率.这边直接贴个链接,可以搭个入门的demo:http://www.jianshu.com/p/24 ...

  5. mybatis mapper文件sql语句传入hashmap参数

    1.怎样在mybatis mapper文件sql语句传入hashmap参数? 答:直接这样写map就可以 <select id="selectTeacher" paramet ...

  6. ][mybatis]MyBatis mapper文件中的变量引用方式#{}与${}的差别

    转自https://blog.csdn.net/szwangdf/article/details/26714603 MyBatis mapper文件中的变量引用方式#{}与${}的差别 默认情况下,使 ...

  7. MyBatis mapper文件中使用常量

    MyBatis mapper文件中使用常量 Java 开发中会经常写一些静态常量和静态方法,但是我们在写sql语句的时候会经常用到判断是否等于 //静态类 public class CommonCod ...

  8. 自己挖的坑自己填--Mybatis mapper文件if标签中number类型及String类型的坑

    1.现象描述 (1)使用 Mybatis 在进行数据更新时,大部分时候update语句都需要通过动态SQL进行拼接.在其中,if标签中经常会有 xxx !='' 这种判断,若 number 类型的字段 ...

  9. MyBatis Mapper 文件例子

    转载:http://blog.csdn.net/ppby2002/article/details/20611737 <?xml version="1.0" encoding= ...

随机推荐

  1. delete *p可以替代delete[] p吗?

    在stackoverflow看到一个标题描述的问题,问题链接是:https://stackoverflow.com/questions/55524140/is-delete-p-an-alternat ...

  2. Python——使用Pycharm连接数据库

  3. LODOP中的纯文本和超文本打印项

    LODOP中的的打印项,有超文本也有纯文本,超文本指的是用html语言,html里的标签为值的打印项,该种打印项会经过浏览器解析,LODOP本身不带解析超文本的引擎,调用的windows底层引擎,与i ...

  4. dijstra算法

    无向图.赋权有向图 的最短路径

  5. Redis DeskTop Manager 使用教程

    redis desktop manager windows 是一款能够跨平台使用的开源性redis可视化工具. redis desktop manager主要针对redis开发设计,拥有直观强大的可视 ...

  6. di.xml

    di.xml文件 该di.xml文件配置对象管理器要注入的依赖项. 领域和应用入口点 每个 模块 都可以具有全局和区域特定的di.xml文件.Magento读取di.xml系统中声明的所有配置文件,并 ...

  7. 用python 发 帝国cms 文章

    在e\extent下面放一个jiekou.php     #!/usr/bin/env python3 # -*- coding: utf-8 -*- import time import urlli ...

  8. 了解PID控制

    @2019-03-07 [小记] 了解PID控制 比例 - 积分 - 微分 积分 --- 记忆过去 比例 --- 了解现在 微分 --- 预测未来

  9. BZOJ4259残缺的字符串

    题目描述 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同程度的残缺. ...

  10. 4.4清北学堂Day1 主要内容:数论,数学

    Day 1; 1.常见的高精 输入输出都用字符数组: 字符数组的实际长度用strlen()来求: 运算时倒序运算,把每一个字符都-‘0’ 进位的处理上也要注意: 小数减大数时先判断大小然后加负号 只能 ...