mybatis-动态sql-trim、where、set
1. where标签的作用:如果该标签包含的元素中有返回值,就插入一个where;如果where后面的字符是以AND和OR开头的,就讲他们剔除。
int findUserByWhere(@Param("name") String name, @Param("phone") String phone);
<select id="findUserByWhere" resultType="User">
SELECT * FROM user
<where>
<if test="name != null and name != ''">
AND name LIKE concat('%', #{name}, '%')
</if>
<if test="phone !=null and phone !=''">
OR phone=#{phone}
</if>
</where>
</select>
如果两个if条件不满足的时候,where标签包着的这一段代码就会被剔除掉,在SQL中就不会出现这一段代码。
2.set标签的作用:如果该标签包含的元素中有返回值,就插入一个set;如果set后面的字符串是以逗号结尾的,就将这个逗号剔除。
int updateUser(@Param("user") User user);
<update id="updateUser">
UPDATE user
<set>
<if test="user.email != null and user.email != ''">email=#{user.email},</if>
<if test="user.phone != null and user.phone != ''">phone=#{user.phone},</if>
</set>
WHERE uid=#{user.uid}
</update>
注意最后的WHERE uid=#{user.uid}不可省略的,如果set包含的内容为空,只能避免最后遗留的逗号问题
3.trim用法:
<trim>标签属性:
- prefix:当trim元素包含内容时,会给内容增加prefix指定的前缀
- prefixOverride:当trim元素包含内容时,会把内容中匹配的前缀字符串去掉。
- suffix:当trim元素包含内容时,会给内容增加prefix指定的后缀
- suffixOverride:当trim元素包含内容时,会把内容中匹配的后缀字符串去掉。
<where>和<set>标签都可以用trim标签实现,并且底层就是通过TrimSqlNode实现的。
<where>标签对应的trim实现:
<trim prefix="WHERE" prefixOverride="AND |OR ">
例子:
<select id="findUserByTrimWhere" resultMap="BaseResultMap">
SELECT * FROM user
<trim prefix="WHERE" prefixOverrides="AND | OR">
<if test="name != null and name != '' ">
AND NAME LIKE concat('%', #{name}, '%')
</if>
<if test="phone !=null and phone !=''">
OR phone=#{phone}
</if>
</trim>
</select>
<set>标签对应的trim实现:
<trim prefix="SET" suffixOverrides=",">
例子:
<update id="updateUserTrim">
UPDATE user
<trim prefix="SET" suffixOverrides=",">
<if test="user.email != null and user.email != ''">email=#{user.email},</if>
<if test="user.phone != null and user.phone != ''">phone=#{user.phone}</if>
</trim>
WHERE uid =#{user.uid}
</update>
提示:
prefixOverride中AND和OR后面的空格不能省略,为了避免匹配到andes或orders等单词。实际上prefixOverride包含"AND""OR""AND\n""OR\n""AND\r""OR\r""AND\t""OR\t"
mybatis-动态sql-trim、where、set的更多相关文章
- mybatis动态sql trim
trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码: 1. select * from user <trim prefix="WHERE" p ...
- MyBatis从入门到精通(第4章):MyBatis动态SQL【if、choose 和 where、set、trim】
(第4章):MyBatis动态SQL[if.choose 和 where.set.trim] MyBatis 的强大特性之一便是它的动态 SQL.MyBatis 3.4.6版本采用了功能强大的OGNL ...
- mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句
mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...
- 9.mybatis动态SQL标签的用法
mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...
- 自己动手实现mybatis动态sql
发现要坚持写博客真的是一件很困难的事情,各种原因都会导致顾不上博客.本来打算写自己动手实现orm,看看时间,还是先实现一个动态sql,下次有时间再补上orm完整的实现吧. 用过mybatis的人,估计 ...
- 超全MyBatis动态SQL详解!( 看完SQL爽多了)
MyBatis 令人喜欢的一大特性就是动态 SQL. 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的. MyBatis 动态 SQL 的出现, 解决了这个麻烦. My ...
- Mybatis动态SQL简单了解 Mybatis简介(四)
动态SQL概况 MyBatis 的强大特性之一便是它的动态 SQL 在Java开发中经常遇到条件判断,比如: if(x>0){ //执行一些逻辑........ } Mybatis应用中,S ...
- mybatis原理分析学习记录,mybatis动态sql学习记录
以下个人学习笔记,仅供参考,欢迎指正. MyBatis 是支持定制化 SQL.存储过程以及高级映射的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转 ...
- mybatis 动态sql和参数
mybatis 动态sql 名词解析 OGNL表达式 OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性, ...
- MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
目录 0 一起来学习 mybatis 1 数据准备 2 if 标签 2.1 在 WHERE 条件中使用 if 标签 2.1.1 查询条件 2.1.2 动态 SQL 2.1.3 测试 2.2 在 UPD ...
随机推荐
- cxLookupComboBox控件的应用
1.Properties-DropDownListStyle:下拉列表的模式, 里面有三个值:lsEditList: lsEditFixedList lsFixedList 2.Head ...
- joda-time使用
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- AC自动机练习2:修改串
这道题的话用到了dp,一个比较简单的dp方程 1466: [AC自动机]修改串 poj3691 时间限制: 1 Sec 内存限制: 128 MB提交: 18 解决: 14[提交] [状态] [讨论 ...
- PHP中addslashes()和htmlspecialchars() 函数的区别及应用
addslashes()防sql注入: 定义如下: addslashes() 函数返回在预定义字符之前添加反斜杠的字符串. 预定义字符是: 单引号(') 双引号(") 反斜杠(\) NULL ...
- ASP.NET练习③——AspNetChosmePager
aspx代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="_Chosm ...
- 怎样理解Node接口 / ParentNode接口 / ChildNode接口
ParentNode 和 ChildNode可以理解为是Node的子集, 它对一些具有父节点或子节点的节点提供了一些额外的方法和属性, 比如: 1. 继承了ParentNode的接口有: 元素节点 / ...
- 怎样获取NodeList某位置上的节点
1. 使用类似 Array 的中括号写法: document.body.childNodes[0] 2. 使用 NodeList.prototype.item(): document.body.chi ...
- 后端查询树的通用SQL,具备懒加载功能
select t.org_id as key, --key值 t.org_name as title, --标题 t.has_sub as folder, --是否显示文件夹 t.has_sub as ...
- Winform 5种皮肤小结(内含丰富的下载实例)
软件界面就是指软件中面向操作者而专门设计的用于操作使用及反馈信息的指令部分. 优秀的软件界面有简便易用,突出重点,容错高等特点. 1.东日IrisSkin 使用IrisSkin只能是对单一的控件重绘 ...
- Centos7:MyCat安装,配置及使用
解压缩 使用,默认端口8066 ./mycat start //启动 ./mycat stop //停止 ./mycat restart //重启