当前位置: 首页 > news >正文

mybatis标签之——trim

trim标记是一个格式化的标记,主要用于拼接sql的条件语句(前缀或后缀的添加或忽略),可以完成set或者是where标记的功能。

trim属性主要有以下四个

  •  prefix:前缀覆盖并增加其内容
  •  suffix:后缀覆盖并增加其内容
  •  prefixOverrides:前缀判断的条件
  •  suffixOverrides:后缀判断的条件

例如在update中

<update id="updateByPrimaryKey" parameterType="Object">
        update student set 
  <trim  suffixOverrides="," > 
    <if test="name != null  ">
        NAME=#{name},
    </if>
    <if test="hobby != null  ">
        HOBBY=#{hobby},
    </if>
  </trim> where id=#{id}
    </update>

 如果name和hobby的值都不为空的话,会执行如下语句

update student set NAME='XX',HOBBY='XX' /*,*/ where id='XX'

会忽略最后一个“,” ;

在select中

<select id="selectByNameOrHobby" resultMap="BaseResultMap">
select * from student 
<trim prefix="WHERE" prefixOverrides="AND | OR">
    <if test="name != null and name.length()>0"> AND name=#{name}
    </if>
    <if test="hobby != null and hobby.length()>0"> AND hobby=#{hobby}
    </if>
</trim>
</select>

 如果name和hobby的值都不为空的话,会执行如下语句

select * from user WHERE /*and*/ name = ‘xx’ and hobby= ‘xx’

会为<trim>片段添加 "WHERE" 前缀,并忽略第一个 “and”  ;

当然,避免出现“WHERE AND”还有其他方法,如下

<!--将where提取出来,并加上“1=1”的查询条件 -->
select * from student 
where 1=1
<trim suffixOverrides=",">
   <if test="name != null and name != ''">
      and NAME = #{name}
   </if>
   <if test="hobby != null and hobby != ''">
      and HOBBY = #{hobby}
   </if> 
</trim>

用在insert中

    <insert id="insert" parameterType="Object">
        insert into student    <trim     prefix="("    suffix=")"    suffixOverrides="," >
    <if test="name != null  ">
        NAME,
    </if>
    <if test="hobby != null  ">
        HOBBY,
    </if>    
    </trim>    <trim     prefix="values("    suffix=")"    suffixOverrides="," >  
    <if test="name != null  ">
        #{name},
    </if>
    <if test="hobby != null  ">
        #{hobby},
    </if>
    </trim>
    </insert>

可以为生成格式正确的insert语句。

 

相关文章:

  • 【laravel5.4】 Composer移除依赖
  • IP-MAC绑定后,能禁止私接路由和随身WIFI吗?
  • c:关于 #include
  • 关于oraclize使用最好的一篇文章
  • BGP的各种属性
  • java基础
  • Vue Devtools--vue调式工具
  • 用awk写递归
  • python if 语句,布尔运算
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • IPv4 forwarding is disabled. Networking will not work.
  • 技术架构组工作职责
  • 第7章 高级分组
  • MySQL数据库的高可用方案总结
  • 一个扎心的错——Consider defining a bean of type 'java.lang.String' in your configuration.
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 07.Android之多媒体问题
  • 2017届校招提前批面试回顾
  • Github访问慢解决办法
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Mithril.js 入门介绍
  • Python连接Oracle
  • Spring Boot快速入门(一):Hello Spring Boot
  • Spring-boot 启动时碰到的错误
  • 从PHP迁移至Golang - 基础篇
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 容器服务kubernetes弹性伸缩高级用法
  • 我这样减少了26.5M Java内存!
  • 在weex里面使用chart图表
  • ​io --- 处理流的核心工具​
  • ​ssh免密码登录设置及问题总结
  • #考研#计算机文化知识1(局域网及网络互联)
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (9)STL算法之逆转旋转
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (排序详解之 堆排序)
  • (三分钟)速览传统边缘检测算子
  • (转)编辑寄语:因为爱心,所以美丽
  • .equals()到底是什么意思?
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET企业级应用架构设计系列之结尾篇
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .net中调用windows performance记录性能信息
  • @Bean有哪些属性
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]
  • [C puzzle book] types
  • [c#基础]DataTable的Select方法
  • [C++数据结构](31)哈夫曼树,哈夫曼编码与解码
  • [ERROR] 不再支持目标选项 5。请使用 7 或更高版本
  • [jobdu]不用加减乘除做加法