(十一)MyBatis的动态SQL:trim元素

trim标记是一个格式化的标记,可以完成select,update,insert语句的格式化操作。trim元素的主要功能有四个:
(1)可以在包含的内容前加上某些前缀,与之对应的属性是prefix;
(2)也可以在包含的内容后加上某写后缀,与之对应的属性是suffix;
(3)可以把包含内容的首部某些内容覆盖,即忽略,对应的属性是prefixOverrides
(4)也可以把包含内容的尾部的某些内容覆盖,对应的属性是suffixOverrides。

以下举例说明一下trim元素的应用场景:

例子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'
where后不存在and,这是因为prefixOverrides="AND|OR"代表去掉第一个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'
在gender='xx'后面不存在逗号,而且自动加了一个set前缀和where后缀。

例子3:

INSERT INTO S_NOTICE 
<trim prefix="(" suffix=")" suffixOverrides=",">ID,<if test="title != null">TITLE,</if><if test="content != null">CONTENT,</if><if test="noticeStatus != null">NOTICE_STATUS,</if><if test="createdBy != null">CREATED_BY,</if>CREATED_TS,<if test="lastUpdBy != null">LAST_UPD_BY,</if>LAST_UPD_TS,
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">SYS_GUID(),<if test="title != null">#{title,jdbcType=VARCHAR},</if><if test="content != null">#{content,jdbcType=VARCHAR},</if><if test="noticeStatus != null">#{noticeStatus,jdbcType=VARCHAR},</if><if test="createdBy != null">#{createdBy,jdbcType=VARCHAR},</if>systimestamp,<if test="lastUpdBy != null">#{lastUpdBy,jdbcType=VARCHAR},</if>systimestamp,
</trim>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

入门干货之Electron的.NET实现-Electron.NET

0x01、Electron.NET1、介绍Electron是由Github上的一支团队和一群活跃贡献者维护。用HTML&#xff0c;CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.Js合并到同一个运行时环境中&#xff0c;并将其打包为Mac&#xff0c;Windows和Linu…

P2514-[HAOI2010]工厂选址【贪心】

正题 题目链接:https://www.luogu.org/problemnew/show/P2514 题目大意 有一个厂&#xff0c;需要bbb吨煤炭&#xff0c;然后第jjj个矿运到该厂的运费为c0,jc_{0,j}c0,j​&#xff0c;运行总费用为运费之和加上h0h_0h0​ 现在在1∼n1\sim n1∼n挑选一个建一个新厂&#xff0…

Scala与Java差异(三)之函数

一、函数定义 &#xff08;1&#xff09;函数的定义与调用 在Scala中定义函数时&#xff0c;需要定义函数的函数名、参数、函数体。 第一个函数如下所示&#xff1a; def sayHello(name: String, age: Int) {if (age > 18) { printf("hi %s, you are a big boy\n&…

(十二)C3P0连接池使用教程

一般我们在项目中操作数据库时&#xff0c;都是每次需要操作数据库就建立一个连接&#xff0c;操作完成后释放连接。因为jdbc没有保持连接的能力&#xff0c;一旦超过一定时间没有使用&#xff08;大约几百毫秒&#xff09;&#xff0c;连接就会被自动释放掉。而每次新建连接都…

通过Chocolatey软件包管理器安装.NET Core

在Linux的世界里&#xff0c;有了yum/apt-get百分之九十的软件都可以通过它来安装管理。但是在Windows系统上&#xff0c;装个软件还是挺折腾的。比如我要装个Chrome浏览器&#xff0c;我先得打开IE浏览器吧&#xff0c;我还打不开Chrome的官网吧&#xff0c;得百度吧&#xff…

P3100-[USACO14JAN]建造滑雪场【贪心,dp】

正题 题目链接:https://www.luogu.org/problemnew/show/P3100 题目大意 一个空矩阵&#xff0c;每次可以将B∗BB*BB∗B的矩阵覆盖为RRR或者BBB。 求BBB最大是多少使得可以覆盖使得原矩阵成为目标矩阵。 解题思路 我们考虑贪心&#xff0c;先分析一下性质。 假设答案为kkk&…

Scala与Java差异(四)之数组操作

一、数组操作之Array、ArrayBuffer以及遍历数组 &#xff08;1&#xff09;Array 在Scala中&#xff0c;Array代表的含义与Java中类似&#xff0c;也是长度不可改变的数组。此外&#xff0c;由于Scala与Java都是运行在JVM中&#xff0c;双方可以互相调用&#xff0c;因此Scal…

(十三)RabbitMQ使用详解

RabbitMQ是基于AMQP的一款消息管理系统。AMQP(Advanced Message Queuing Protocol)&#xff0c;是一个提供消息服务的应用层标准高级消息队列协议&#xff0c;其中RabbitMQ就是基于这种协议的一种实现。 常见mq&#xff1a; ActiveMQ&#xff1a;基于JMSRabbitMQ&#xff1a;…

ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理

在ASP.NET Core Web API下事件驱动型架构的实现&#xff08;一&#xff09;&#xff1a;一个简单的实现中&#xff0c;我介绍了事件驱动型架构的一种简单的实现&#xff0c;并演示了一个完整的事件派发、订阅和处理的流程。这种实现太简单了&#xff0c;百十行代码就展示了一个…

和某ZYC巨佬和XXY巨佬的随机挑战2总结

前言 一切的起点在那个炎热的酷暑&#xff0c;菜的一批的WYCWYCWYC坐在最容易被∗*∗的左下角。这时他永远都想不到&#xff0c;他与巨佬之间的挑战&#xff0c;即将开始。 正题 规则 随机跳333到蓝题&#xff0c;然后写完。 完成记录 题目博客 T1:P3100−[USACO14JAN]T1:P31…

(十四)消息中间件MQ详解及四大MQ比较

一、消息中间件相关知识 1、概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件&#xff0c;如老牌的ActiveMQ、RabbitMQ&a…

jzoj3301-[集训队互测2013]家族【并查集,暴力】

正题 题目大意 一个图每个边有不同的频率&#xff0c;对于大小为xxx的联通可以共享价值wxw_xwx​。现在要去保留一段频率内的边&#xff0c;使得剩下的联通分量价值之和至少为KKK。 求最小的保留频率宽度。 解题思路 首先将频率进行排序&#xff0c;然后愉快的发现不满足二分…

g4e基础篇#3 Git安装与配置

现在你已经对Git有了最基本的了解&#xff0c;现在让我们开始动手开始安装和配置Git环境。Git工具包括Git命令行工具&#xff0c;图形化工具和服务器环境&#xff1b;在我们这个教程中&#xff0c;我们会使用以下软件配置我们的环境&#xff1a;• Windows 操作系统&#xff08…

Scala与Java差异(五)之Map与Tuple

一、 创建Map &#xff08;1&#xff09;创建Map // 创建一个不可变的Map val ages Map("Leo" -> 30, "Jen" -> 25, "Jack" -> 23) ages("Leo") 31 // 创建一个可变的Map val ages scala.collection.mutable.Map("…

jzoj3302-[集训队互测2013]供电网络【上下界网络流,费用流,动态加边】

正题 题目大意 若干个城市一些城市有一定的电&#xff0c;有些城市需要一定的电。对于第iii个城市购买一个电需要iniin_iini​&#xff0c;送出电需要outiout_iouti​。当然城市之间也可以相互传输电。 对于一条电缆(x,y,a,b,l,r)(x,y,a,b,l,r)(x,y,a,b,l,r)表示x−>yx-&g…

Mybatis生成器插件扩展,生成findInSet方法

Mybatis生成器插件扩展&#xff0c;生成findInSet方法 public Criteria andNameFindInSet(String value) {addCriterionPattern("find_in_set($value, name)", value, "name");return (Criteria) this;}public Criteria andNamePattern(String pattern, S…

[认证授权] 6.Permission Based Access Control

在前面5篇博客中介绍了OAuth2和OIDC&#xff08;OpenId Connect&#xff09;&#xff0c;其作用是授权和认证。那么当我们得到OAuth2的Access Token或者OIDC的Id Token之后&#xff0c;我们的资源服务如何来验证这些token是否有权限来执行对资源的某一项操作呢&#xff1f;比如…

P4841,jzoj3303-城市规划【NTT,多项式求逆,dp】

正题 题目链接:https://www.luogu.org/problemnew/show/P4841 题目大意 求nnn个点的简单联通无向图的个数。 解题思路 首先考虑n2n^2n2&#xff0c;我们设gig_igi​表示iii个点的简单无向图的个数&#xff0c;显然gi2n(n−1)2g_i2^{\frac{n(n-1)}{2}}gi​22n(n−1)​ 然后我…

微软发布PowerShell Core第一个版本:支持多平台开发

微软旗下的PowerShell团队正式宣布推出PowerShell Core 6.0&#xff0c;非常诡异的是这明明是Core的第一个版本&#xff0c;但是却用了一个6.0后缀的版本号。“这是我们对PowerShell做出的最大最重要的改变&#xff01;”微软技术研究员兼PowerShell创始人Jeffrey Snover在Twit…

Mybatis生成器插件扩展,定制方法生成,list参数生成

Mybatis生成器插件扩展&#xff0c;定制方法生成 public Criteria andNameIsEmpty() {addCriterion("name ");setCriterionPattern();return (Criteria) this;}public Criteria andNameFindInSet(String value) {addCriterion("find_in_set($value, name)"…