Mybatis trim 标签的 2 个妙用!
云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
mybatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀,或者添加“)“等后缀,可用于选择性插入、更新、删除或者条件查询等操作。
以下是trim标签中涉及到的属性:
下面使用几个例子来说明Mybatis trim标签的使用。
1、使用trim标签去除多余的and关键字
有这样的一个例子:
<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>
2、使用trim标签去除多余的逗号
有如下的例子:
如果红框里面的条件没有匹配上,sql语句会变成如下:
INSERT INTO role(role_name,) VALUES(roleName,)
插入将会失败。使用trim标签可以解决此问题,只需做少量的修改,如下所示:
其中最重要的属性是
suffixOverrides=","
表示去除sql语句结尾多余的逗号。
注:如果你有兴趣的话,也可以研究下Mybatis逆向工程生成的Mapper文件,其中也使用了trim标签,但结合了foreach、choose等标签,更多的是牵扯到Criterion的源码研究。
不过研究完之后,你将熟练掌握Mybatis各种标签的使用,学到Criterion的设计思想,对自己的启发将会很大。
如果想要了解更多关余trim标签的内容,请移步《trim标签源码解析》。本文参考 Mybatis官方文档(https://mybatis.org/mybatis-3/zh/dynamic-sql.html)
【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/zhibo立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-08-06
本文作者:wt_better
本文来自:“互联网架构师”,了解相关信息可以关注“互联网架构师”

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
kunlun-admin v1.0.0 发布,基于 SpringCloud 的后台管理系统
昆仑管理系统 v1.0.0 发布,基础功能: 1、提供公共基础模型、工具、自动配置、统一异常处理、统一Swagger配置及操作日志AOP等 2、服务注册、服务发现、服务心跳检测、高级消息队列(RabbitMQ)及分布式配置中心等; 3、服务路由、登录用户校验、鉴权及生成Token、Hystrix的turbine模式配置及Swagger路由配置等; 4、提供基础数据支持,如菜单、角色、权限等,并提供基于Redis的分布式缓存功能、基于ElasticSearch + RabbitMQ的服务调用追踪、资源爬取等; 5、 业务功能支持服务,提供业务数据、动态数据源、脚本自动执行及基于RabbitMQ的异步操作日志生成功能; 6、 基于docker容器化部署。 系统介绍 昆仑管理系统是一套基于前后端分离架构的后台管理系统。kunlun-web 基于React + Umi(乌米) + Ant Design (蚂蚁金服) 构建开发,提供前端解决方案;kunlun-service 基于 SpringBoot 与 Spring Cloud 构建开发,提供后端基于微服务架构的解决方案。系统通过Apache...
- 下一篇
震惊!Redis 的字符串居然是这样实现的…
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 之前本人在找工作面试时在Redis相关问题上可栽了跟头。在面试前按常规套路准备了一下,比如 Redis 的常用5种数据结构,Redis持久化策略,Redis实现分布式锁,简单发布订阅等等都准备了,当时不知天高地厚以为十拿九稳了,可是万万没想到我终究还是在Redis的被问的第一个问题上翻船了~~ 面试官 : 看你简历上写了熟悉常用数据结构,都有哪些说说本人 : 常用有5种,string,list,set,zset,hash(内心很得意)面试官 : 那你说说都用过哪些数据结构_ 本人 : 用的最多的是string,通常会把json字符串存进去_面试官 : 那你知道Redis内部是怎么实现它的string的么?_ 本人 : 呃~,我了解Redis是用C语言写的,至于具体实现就不清楚了~到此一面卒~~~有相同经历的朋友么? 回去后恶补了一下Redis有关原理性的知识点,恰好最近在最总结面试经历于是有了今天这篇文章。本篇会讲以下内容:Redis字符串的实现Redis字符串的性能优势 Redis字符...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS关闭SELinux安全模块
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境
- 设置Eclipse缩进为4个空格,增强代码规范