trim标签

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

下面使用几个例子来说明trim标签的使用。

有这样的一个例子:

<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>

这里的prefix代表如果if里存在匹配,则会加上prefix前缀“where”,而当第一次前缀出现了prefixOverrides=“and” 则会去掉

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

<update id="testTrim" parameterType="com.mybatis.pojo.User">update user<trim prefix="set" suffixOverrides=","><if test="cash!=null and cash!=''">cash= #{cash},</if><if test="address!=null and address!=''">address= #{address},</if></trim><where>id = #{id}</where></update>

只有prefix=“set”,表示在trim包裹的部分的前面添加 set。
只有suffixOverrides=“,”,表示删除最后一个逗号。

也可以这样写:

    <update id="testTrim" parameterType="com.mybatis.pojo.User">update userset<trim suffixOverrides="," suffix="where id = #{id}"><if test="cash!=null and cash!=''">cash= #{cash},</if><if test="address!=null and address!=''">address= #{address},</if></trim></update>

由于set写在了外面,trim中就不再需要prefix属性了,所以删除。
where标签从外面拿进trim里面,suffixOverrides这样是将最后一个逗号”,”消除,并在结尾添加了即suffix作为suffix。
总结:
trim标签使用
1、trim 有四个属性
2、prefix,suffix 表示在trim标签包裹的部分的前面或者后面 添加内容( 注意:是没有prefixOverrides,suffixOverrides的情况下)
3、如果有prefixOverrides,suffixOverrides 表示覆盖Overrides中的内容。
4、如果只有prefixOverrides,suffixOverrides 表示删除。

choose (when, otherwise)标签

有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个,choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。

例如下面例子,同样把所有可以限制的条件都写上,方面使用。choose会从上到下选择一个when标签的test为true的sql执行。

<!--  choose(判断参数) - 按顺序将实体类 User 第一个不为空的属性作为:where条件 -->
<select id="selectControlTableColumnByTableColumnIdAndIsUpdateOrIsDelete"  parameterType="com.uama.mdm.model.mdata.MdControlTableColumn" resultMap="BaseResultMap">SELECT<include refid="Base_Column_list"></include>FROM md_control_table_column u<where><choose><when test="isUpdate !=null ">AND u.is_update = #{isUpdate, jdbcType=INTEGER}</when><when test="isDelete != null">AND u.is_delete = #{isDelete, jdbcType=INTEGER}</when><otherwise></otherwise></choose><if test="tableColumnId != null">AND table_column_id = #{tableColumnId}</if></where></select>

这里的用来封装SQL语句,如普通 <sql id=“base" id ,name,age>, 来调用该字段,test用来判断

扩展可以看这篇文章mybatis常用标签

Mybatis中的常用标签相关推荐

  1. html中form标签的作用style,HTML5中meta常用标签属性说明

    HTML5中meta常用标签属性说明 IE 兼容模式,Bootstrap 不支持 IE 古老的兼容模式.为了让 IE 浏览器运行最新的渲染模式下,建议将此  标签加入到你的页面中: content属性 ...

  2. Mybatis中Collection集合标签的使用

    mybatis简单的CURD就不用多说了,网上相关博客文档一大堆.分析一下Mybatis里面的collection聚集查询.  假设一个班级有多名学生为例,通过班级号查询出该班级的信息,和班级里面的所 ...

  3. Dubbo——Dubbo中的常用标签、服务化最佳实践

    文章目录: 1.Dubbo中的常用标签 2.Dubbo中的服务化最佳实践 2.1 分包 2.2 粒度 2.3 版本 2.4 案例分析 2.4.1 003-link-interface 2.4.2 00 ...

  4. MyBatis中的常用注解

    在MyBatis中,一些SQL语句例如(select * from 表名;delete from 表名)等等,这些SQL语句比较简单,没有那些复杂的关联关系,但是在不用注解的情况下,要执行这些方法的话 ...

  5. java web中jsp常用标签

    在jsp页面开发过程中,经常需要使用JSTL(Java Server Pages Standard Tag Library)标签开开发页面,是看起来更加的规整舒服. JSTL主要提供了5大类标签库:1 ...

  6. java web 有哪些标签库_java web中jsp常用标签

    在jsp页面开发过程中,经常需要使用JSTL(Java Server Pages Standard Tag Library)标签开开发页面,是看起来更加的规整舒服. JSTL主要提供了5大类标签库:1 ...

  7. 技巧:MyBatis 中的trim标签,好用!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | wt_better 来源 | https://blog. ...

  8. MyBatis 中的trim标签介绍

    mybatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 "where"."set"以及"values(& ...

  9. MyBatis 中的trim标签

    mybatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 "where"."set"以及"values(& ...

最新文章

  1. 使用Logstash同步MySQL数据库信息到ElasticSearch
  2. 动态壁纸安卓_安卓 高清 动态 壁纸
  3. Execute .NET Code under SQL Server 2005
  4. 基于Spring+SpringMVC+Mybatis架构的开源博客
  5. 关于Toast 详解
  6. Figma插件开发-生成Gif
  7. 在Eclipse4.2x中安装最新版插件WindowsBuilder
  8. 【解决方案】GB28181/RTSP/Onvif/HikSDK/Ehome协议视频共享平台EasyCVR人脸识别助力打造智慧安检
  9. 直立车控制之PID算法分析
  10. 【零知ESP8266教程】快速入门28 六轴传感器模块的使用
  11. 淘宝x-sign签名算法
  12. 探究“补阶乘大法的本质“——糖水不等式
  13. excel多工作表汇总如何完成?
  14. 快速弄懂iPhone X 设计尺寸和适配
  15. 计算机--计算机寓言
  16. 程序员写作能赚多少钱,怎么赚
  17. 一篇关于GPS定位写得最详实清晰的文章之一
  18. PHP中preg_match函数详解
  19. 彻底终结敲诈者 360独家推出“文档卫士”
  20. height:100%和height:inherit比较

热门文章

  1. SmartBulter管家
  2. 立体定向脑干出血穿刺术
  3. HX711称重传感器的功能实现
  4. 【Web技术】1305- 看完就懂的前端拖拽那些事
  5. 知网计算机论文查重查代码,知网查重中的代码会进行查重吗? - 搜外SEO问答
  6. 报错解决——ImportError: cannot import name ‘container_abcs‘ from ‘torch._six‘ (/home/csj/anaconda3/envs/p
  7. 决战双十一,CBK全员玩命~~~
  8. Spring注解驱动开发第11讲——面试官让我说说:如何使用FactoryBean向Spring容器中注册bean?
  9. C#自动更新Excel报表而不改变原有样式(2021.8.11)
  10. 汇丰软件测试英语面试,汇丰笔试 - Beyond my life. - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...