mybatis中xml之trim属性说明

mybatis的xml中trim标签有四个属性

1.prefix 前缀增加的内容

2.suffix 后缀增加的内容

3.prefixOverrides 前缀需要覆盖的内容,一般是第一个判断条件前面的多余的结构,如:第一个判断条件前面多了 ‘and'

4.suffixOverrides 后缀需要覆盖的内容,一般是最后一个数据的后面符号,如:set值的时候,最后一个值的后面多一个逗号‘,'

举几个例子:

1.根据用户姓名和年龄查询用户,有什么值就根据什么条件(目的是说明几个属性用法,可能例子不适用于实际场景中)

select * from User where name='zhangsan' and age='20';
<select id='queryUser'>
        select * from User
        <trim prefix='where' prefixOverrides='and'>
            <if test="name != null and name != ''">
                name = #{name}
            </if>
            <if test="age !=null and age !=''">
                and age = #{age}
            </if>
        </trim>
<select>

上面例子是很常规的一个写法,第一个条件前面没有任何符号,第二个条件要加上and,否则sql语句会报错。很理想的状态是第一个和第二个都有值,但是既然判断,说明也可能会没有值,当第一个name没有值的时候,这个时候sql语句就会是

select * from User where and age='',很明显这个sql语句语法存在问题。在这里标签属性prefixOverrides就起作用了,它会让前缀where覆盖掉第一个and。覆盖之后的是:select * from User where age='';

前缀加上where就不说,因为属性 prefix='where',这个where 也可以写在<trim>标签的外面,这样此处就无需用到属性prefix了。

现在有更方便的标签了,就是<where>,用这个标签效果一样的,会忽略掉第一个符合条件前面的符号。

select * from User
<where>
             <if test="name != null and name != ''">
                name = #{name}
            </if>
            <if test="age !=null and age !=''">
                and age = #{age}
            </if>
</where>

如果第一个name值是null,则age前面的and会被忽略掉。

再说说另两个属性,suffix和suffixOverrides。

如:更新用户的信息,哪些字段有值就更新哪些字段,sql语句如下:

<update id="updateUser">
    update User
    <trim prefix="set" suffixOverrides="," suffix="where id='1'">
        <if test="name != null and name != ''">
            name=#{name},
        </if>
        <if test="age != null and age !=''">
            age=#{age},
        </if>
    </trim>
</update>

本例中最后一个条件中的逗号“,”会被后缀覆盖掉,本例中的后缀是where id =‘1';

OK,纯属为了说明四个属性怎么使用的,具体里面的值会根据具体需求而定。希望举一反三~

trim标签的使用场景

使用trim标签去除多余的逗号

如果红框里面的条件没有匹配上,sql语句会变成如下:

INSERT INTO role(role_name,) VALUES(roleName,)

插入将会失败。

做如下修改:

其中最重要的属性是

suffixOverrides=","

表示去除sql语句结尾多余的逗号.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • MyBatis动态SQL中的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

  • 详解MyBatis 常用写法

    什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. 1.forEach 循环   forEach 元素的属性主要有 item, idnex, collection,

  • mybatis trim标签的使用详解

    mybatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 "where"."set"以及"values(" 等前缀,或者添加")"等后缀,可用于选择性插入.更新.删除或者条件查询等操作. 以下是trim标签中涉及到的属性: 属性 描述 prefix 给sql语句拼接的前缀 suffix 给sql语句拼接的后缀 prefixOverrides 去除sql语句前面的关键字或者字符,该关键

  • Mybaits通用的10种写法总结大全

    前言 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. 用来循环容器的标签forEach,查看例子 foreach元素的属性主要有item,index,collection,open,sepa

  • mybatis中xml之trim属性说明

    mybatis的xml中trim标签有四个属性 1.prefix 前缀增加的内容 2.suffix 后缀增加的内容 3.prefixOverrides 前缀需要覆盖的内容,一般是第一个判断条件前面的多余的结构,如:第一个判断条件前面多了 'and' 4.suffixOverrides 后缀需要覆盖的内容,一般是最后一个数据的后面符号,如:set值的时候,最后一个值的后面多一个逗号',' 举几个例子: 1.根据用户姓名和年龄查询用户,有什么值就根据什么条件(目的是说明几个属性用法,可能例子不适用于

  • Mybatis中xml的动态sql实现示例

    目录 动态SQL简介 一.#{}与${}区别#{}表示一个占位符,使用占位符可以防止sql注入, 二.传递包装类型 三.动态sql—类型 四.动态sql—详解 (一)if 语句处理 (二)choose (when,otherwize)语句处理 (三)trim 语句处理 (四)where 语句处理 (五)foreach 语句处理 动态SQL简介 动态 SQL 是 MyBatis 的强大特性之一. 如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接

  • Mybatis中 XML配置详解

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" > <configuration> <

  • MyBatis中XML 映射文件中常见的标签说明

    SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出): cache – 对给定命名空间的缓存配置. cache-ref – 对其他命名空间缓存配置的引用. resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象. parameterMap – 已被废弃!老式风格的参数映射.更好的办法是使用内联参数,此元素可能在将来被移除. sql – 可被其他语句引用的可重用语句块. insert – 映射插入语句 update – 映射更新语句 delete –

  • mybatis框架xml下trim中的prefix与suffix等标签的用法

    trim中prefix与suffix等标签用法 1.prefix 前缀增加的内容 2.suffix 后缀增加的内容 3.prefixOverrides 前缀需要覆盖的内容,一般是第一个判断条件前面的多余的结构,如:第一个判断条件前面多了 'and' select * from User where name='zhangsan' and age='20'; <select id='queryUser'> select * from User <trim prefix='where' pr

  • mybatis中mapper.xml文件的常用属性及标签讲解

    目录 ${}和#{}的区别 常见的属性 常见标签 < sql >标签 < where >和< if >标签 < set >标签 < trim>标签 < choose >标签 mybatis 的xml文件中标签错误 ${}和#{}的区别 #{}会自动在你要插入字段两端 加上引号.例如:你写的是order by #{username},传的是 zhangsan,那么会解析成order by "zhangsan". ${

  • mybatis mapper.xml中如何根据数据库类型选择对应SQL语句

    目录 mapper.xml根据数据库类型选择对应SQL语句 1.spring-database.xml文件中配置 2.mapper.xml文件中配置 mapper.xml动态SQL语句用法 if trim where set choose(when.otherwise) foreach mapper.xml根据数据库类型选择对应SQL语句 1.spring-database.xml文件中配置   <bean id="vendorProperties" class="or

  • 关于MyBatis中Mapper XML热加载优化

    前几天在琢磨mybatis xml热加载的问题,原理还是通过定时扫描xml文件去跟新,但放到项目上就各种问题,由于用了mybatisplus死活不生效.本着"即插即用"的原则,狠心把其中的代码优化了一遍,能够兼容mybatisplus,还加入了一些日志,直接上代码 package com.bzd.core.mybatis; import java.io.File; import java.io.FileNotFoundException; import java.io.IOExcept

  • Mybatis中实体类属性与数据列表间映射方法介绍

    Mybatis不像Hibernate中那么自动化,通过@Column注解或者直接使用实体类的属性名作为数据列名,而是需要自己指定实体类属性和 数据表中列名之间的映射关系,这一点让用惯了Hibernate的人很不习惯,所幸经过探索找到了建立映射关系的三种办法,其中总也有比较 简单的. 首先先定义一个实体类,如下: public class User implements Serializable { private Integer userId; private String userName;

  • Mybatis中的config.xml配置文件详细解析

    经过前面的文章,我觉得对Mybatis的正题理解已经足够了,但是对Mybatis的使用,我觉得还是会有一点的模糊,就我个人而言,我觉得掌握好Mybatis框架,主要要明白三个文件,第一个就是等下要谈论的Mybatis-comfig.xml文件,还有就是**Mapper.xml,以及我们所定义的Mapper类,理解了这三个东西,然后有sql的基础,还有java的基础的话,后面不论是使用基于xml的方法,还是基于java-based Configuration的方法,都会简单的多. 废话不多说,现在

随机推荐