mybatis trim标签使用详解

这篇具有很好参考价值的文章主要介绍了mybatis trim标签使用详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

mybatis trim标签使用详解

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

以下是trim标签中涉及到的属性:

prefix=添加前缀 suffix=添加后缀

prefixOverrides=去掉前缀 suffixOverrides=去掉后缀

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

一、使用trim标签去除多余的and关键字(和where对比)

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG 
  WHERE 
  <if test="state != null">
    state = #{state}
  </if> 
  <if test="title != null">
    AND title like #{title}
  </if>
  <if test="author != null and author.name != null">
    AND author_name like #{author.name}
  </if>
</select>

如果这些条件没有一个能匹配上会发生什么?最终这条 SQL 会变成这样:

SELECT * FROM BLOG
WHERE

这会导致查询失败。如果仅仅第二个条件匹配又会怎样?这条 SQL 最终会是这样:

SELECT * FROM BLOG
WHERE 
AND title like 'someTitle'

你可以使用where标签来解决这个问题,where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去插入“WHERE”子句。而且,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG 
  <where> 
    <if test="state != null">
         state = #{state}
    </if> 
    <if test="title != null">
        AND title like #{title}
    </if>
    <if test="author != null and author.name != null">
        AND author_name like #{author.name}
    </if>
  </where>
</select>

trim标签也可以完成相同的功能,写法如下:

<trim prefix="WHERE" prefixOverrides="AND">
	<if test="state != null">
	  state = #{state}
	</if> 
	<if test="title != null">
	  AND title like #{title}
	</if>
	<if test="author != null and author.name != null">
	  AND author_name like #{author.name}
	</if>
</trim>

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

mybatis trim标签使用详解
如果红框里面的条件没有匹配上,sql语句会变成如下:

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

多出来多余的逗号,插入将会失败。
使用trim标签可以解决此问题,只需做少量的修改,如下所示:
mybatis trim标签使用详解
其中最重要的属性是

suffixOverrides=","

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

同时,为了更明确trim的几个属性的关系 ,如下两个xml是等价的

<insert id="insertSelective">
   insert into BZ_EVENTINFOGS
   (
      <if test="eventinfoid != null">
        EVENTINFOID,
      </if>
      <if test="eventinfoname != null">
        EVENTINFONAME,
      </if>
   )
   values (
      <if test="eventinfoid != null">
        #{eventinfoid,jdbcType=VARCHAR},
      </if>
      <if test="eventinfoname != null">
        #{eventinfoname,jdbcType=VARCHAR},
      </if>
   )

等价于

<insert id="insertSelective">
   insert into BZ_EVENTINFOGS
   <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="eventinfoid != null">
        EVENTINFOID,
      </if>
      <if test="eventinfoname != null">
        EVENTINFONAME,
      </if>
   <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="eventinfoid != null">
        #{eventinfoid,jdbcType=VARCHAR},
      </if>
      <if test="eventinfoname != null">
        #{eventinfoname,jdbcType=VARCHAR},
      </if>

即开头所述:

prefix=添加前缀 suffix=添加后缀

prefixOverrides=去掉前缀 suffixOverrides=去掉后缀文章来源地址https://www.toymoban.com/news/detail-460497.html

到了这里,关于mybatis trim标签使用详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mybatis的<foreach>标签使用

    记录 :419 场景 :使用MyBatis的foreach/foreach标签的循环遍历List类型的入参。使用collection属性指定List,item指定List中存放的对象,separator指定分割符号,open指定开始字符,close指定结束字符。 版本 :JDK 1.8,Spring Boot 2.6.3,mybatis-3.5.9。 1.基础知识 1.1MyBatis的标签 (1)查看MyBatis支持的

    2023年04月24日
    浏览(38)
  • Mybatis中where标签和if标签结合使用说明

    由于不小心将 and 或者 or 写在了语句后面,导致mybatis无法自主判别,这种问题在新上手的同学中很是常见。下面我们探讨一下,在哪些情况下Mybatis无法判断动态SQL语句中的 and 或者 or 。 select筛选出视图对象的参数,用于给前端返回页面参数使用。 以下代码格式是正确,我们

    2023年04月08日
    浏览(35)
  • MyBatis 动态SQL的标签有哪些?如何使用?

    目录 1. MyBatis 动态SQL标签有什么用? 2. if 标签 3. where 标签 4. trim 标签 5. choose,when,otherwise 6. foreach 1. MyBatis 动态SQL标签有什么用? 我来说一个场景大家就明白了,如下图,大家应该在铁路12306上买过火车票吧,可以看到,我们在选票的时候可以对车做很多种选择和筛选,系

    2024年02月11日
    浏览(36)
  • Mybatis 的多种标签使用以及 Spring 框架单元测试

    在讲解 Mybatis 的标签之前, 要先介绍一下另一个 Java 的好帮手 Spring 框架内置的 JUnit 测试框架. 为什么要在 Mybatis 学习之前了解 JUnit 呢 ? 很大一部分原因不仅仅是因为单元测试是写完项目后开发人员自己需要做的, 更重要的是当前阶段学习中, 利用 JUnit 可以更简单的构造数据来

    2024年02月09日
    浏览(52)
  • Spring+MyBatis使用collection标签的两种使用方法

    目录 项目场景: 实战操作: 1.创建菜单表 2.创建实体  3.创建Mapper 4.创建xml  属性描述: 效率比较: 本文说明了Spring Boot+MyBatis使用collection标签的两种使用方法 1. 方法一: 关联查询 2. 方法二: 嵌套select查询 这里只创建一张表,树结构只有两级,方便学习,多表关联是同样的

    2024年02月09日
    浏览(59)
  • mybatis之动态sql、if\choose\when\otherwise\trim\where\set\foreach\bind有案例

    定义 :根据不同条件拼接SQLy语句,实现对数据库更准的操作。 实现方式 :映射器配置文件或者注解 常用动态SQL元素 : if元素 :判断语句,但条件分支判断 choose元素 :when、otherwise;多条件分支判断,等同于Java中的switch trim元素 :where,set;辅助元素,用于处理一些SQL拼接

    2024年02月02日
    浏览(37)
  • mybatis-plus如何使用枚举类来实现性别和标签的数字带描述

    文章目录 目录 文章目录 前言 一、环境准备 二、使用步骤 一 实体类 二 枚举类  三 持久层 四 控制层  总结 枚举是一种表示一组有限可能取值的数据类型。它具有以下几个好处: 易于理解和维护:枚举提供了一种清晰明了的方式来表示一组具体的取值,使代码更易于理解

    2024年02月11日
    浏览(52)
  • 5.4 如何在Mybatis中使用insert标签并返回主键id?-- 教你通用做法

    通过 《上文》,我们学会了XML映射文件Mapper的创建,以及最常用的select标签和resultMap标签,本文主要讲解 insert标签 ,用于和insert SQL语句映射,非常简单上手,只有两个点可以扩展讲讲:一个点是 insert后返回主键id(会介绍两种方式) ,另外一个点是 实现批量添加 ,原本打算

    2024年02月06日
    浏览(41)
  • MyBatis动态sql之批量修改、批量新增(使用foreach标签的一条sql语句解决)

            批量新增和批量修改在业务中是很常见的,一条sql访问数据库和通过代码循环体中循环访问数据库做单个数据新增修改相比较下:一条sql访问数据库性能上明显提升,代码且简洁明了 1、Mapper.java中 说明: 参数是list  2、Mapper.xml中 说明: 通过trim标签拼接前后缀和

    2024年02月10日
    浏览(51)
  • PHP使用ltrim、rtrim以及trim处理中文时遇到的“坑”

    说坑有点过分,更多的是自己写代码的时候,没有考虑全面,导致自己踩坑了。 发现经过 rtrim 处理的字符串无法入库,检查后发现数据库报错信息: General error: 1366 Incorrect string value: ‘xxxxxxx’ for column xxxxx 其实看到这个报错,就能立马意识到问题所在:字符串被不正确的截

    2024年02月01日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包