MyBatis 动态 SQL trim 的应用,可以添加或删除前缀或后缀

简介: 版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。 https://blog.csdn.net/testcs_dn/article/details/80986793 MyBatis 动态 SQL trim 的应用,可以添加或删除前缀或后缀。
版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。 https://blog.csdn.net/testcs_dn/article/details/80986793

MyBatis 动态 SQL trim 的应用,可以添加或删除前缀或后缀。

比如:你的查询需求是有一部分字段条件是 and 关系,而有一部分字段是 or 关系,例如:

Select * from tableName where 
a=1 and b=2 and c=3
and(
   d like '%a%' or e like '%b%'
)

那么 Where 的部分可以使用 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>

可以看到  Where 条件中包含 if 条件语句,也就是可能存在根本没有条件的可能,那么使用 <where> 标签,就能够实现如果没有任何条件的话,就不添加 Where 关键词的功能;同时还可以将条件语句中存在的第一个 AND 去掉。

但是遇到有一部分字段是 or 关系的情况怎么办呢?

<trim> 就能实现这样一个神奇的功能!

先看几个官方的例子:

<trim prefix="WHERE" prefixOverrides="AND |OR ">
  ... 
</trim>

这个就可以代码上面的  <where> 标签的功能,使用方法就是用它来代替  <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>
    </set>
  where id=#{id}
</update>

代替方法:

<trim prefix="SET" suffixOverrides=",">
  ...
</trim>

嗯嗯,它的用法你是不是已经学会了呢?

讲重点:

<trim> 标签属性:prefix 要添加的前缀,suffix 要添加的后缀,prefixOverrides 要去掉的语句前面部分的内容,suffixOverrides 要去掉的语句后面部分的内容。

需求实现方法:

<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>
    <trim prefix="AND (" suffix=")" prefixOverrides="OR ">
     <if test="title != null">
        OR title like #{title}
    </if>
    <if test="author != null and author.name != null">
        OR author_name like #{author.name}
    </if>
    </trim>
  </where>
</select>

你看懂了吗?

官方文档只是给了简单的例子,标签都有哪些属性也没有全部列出来。

学习的时候还要连蒙带猜的。







目录
相关文章
|
18天前
|
SQL XML Java
mybatis 调用修改SQL时 出现了一个问题 没有修改成功也没有报错
mybatis 调用修改SQL时 出现了一个问题 没有修改成功也没有报错
18 0
|
22小时前
|
SQL Java 数据库连接
mybatis动态sql
mybatis动态sql
|
3天前
|
SQL Java 数据库连接
MyBatis #与$的区别以及动态SQL
MyBatis #与$的区别以及动态SQL
7 0
|
4天前
|
SQL Java 数据库连接
【mybatis】动态sql之批量增删改查
【mybatis】动态sql之批量增删改查
9 0
|
15天前
|
SQL 安全 Java
【Mybatis】Mybatis如何防止sql注入
【Mybatis】Mybatis如何防止sql注入
|
16天前
|
SQL Java 数据库连接
【Mybatis】动态sql之sql的复用
【Mybatis】动态sql之sql的复用
12 0
|
2月前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
67 1
|
2月前
|
druid Java 数据库连接
Spring Boot3整合MyBatis Plus
Spring Boot3整合MyBatis Plus
48 1
|
9天前
|
SQL Java 数据库连接
15:MyBatis对象关系与映射结构-Java Spring
15:MyBatis对象关系与映射结构-Java Spring
29 4
|
13天前
|
XML Java 数据库连接
Spring Boot与MyBatis:整合与实战
【4月更文挑战第29天】在现代的Java Web应用开发中,持久化层框架扮演了至关重要的角色。MyBatis作为一款优秀的持久化框架,被广泛应用于Java开发中。Spring Boot提供了简化开发流程的功能,而与MyBatis的整合也变得更加便捷。
24 0