MyBatis if标签的用法
<!--
4.1.1 在WHERE条件中使用if
需求:
实现一个用户管理高级查询功能,根据输入的条件去检索用户信息。这个功能
还需要支持以下三种情况:当只有输入用户名时,需要根据用户名进行模糊查
询;当只有输入邮箱时,根据邮箱进行完全匹配;当同时输入用户名与邮箱时
用这两个条件去查询匹配的用户。
<if>便签有一个必填的属性test,test的属性值是一个符合OGNL要求的判断表达式,
表达式的结果可以是true或者false,初次之外所有的的非0值都为true,只有0为false。
且有如下规则:
1.判断条件property!=null或者property==null:适用于任何类型的字段,用于判断属性值是否为空
2.判断条件property!=''或者property=='':仅适用于String类型的字段,用于判断是否为空字符串
3.and和or:当有多个判断条件时,适用and或or进行连接,嵌套的判断可以适用小括号分组。
-->
<!--不能满足需求的代码,标记下模糊匹配的写法-->
<select id="selectByUser" resultType="tk.mybatis.simple.model.SysUser">
select
id,
use_name userName,
user_password userPassword,
user_email userEmail,
user_info userInfo,
head_img headImg,
create_time createTime
from sys_user
where
user_name like concat('%',#{userName},'%') and
uer_email=#{userEmail}
</select>
<!--改进后的代码-->
<select id="selectByUser" resultType="tk.mybatis.simple.model.SysUser">
select
id,
use_name userName,
user_password userPassword,
user_email userEmail,
user_info userInfo,
head_img headImg,
create_time createTime
from sys_user
where
1=1
<if test="userName!=null and userName!=''">
and user_name like concat('%',#{userName},'%')
</if>
<if test="userEmail!=null and userEmail!=''">
and user_email = #{userEmail}
</if>
</select>
<!--
4.1.3 在UPDATE更新列中使用if
需求:
只更新有变化的字段,需要注意,更新的时候不能将原来的值
但没有发生变化的字段更新为空或null。
-->
<!--需求实现的代码-->
<update id="updateByIdSelective">
update sys_user
set
<if test="userName!=null and userName!=''">
user_name=#{userName},
</if>
<if test="userEmail!=null and userEmail!=''">
user_email=#{userEmail},
</if>
<if test="userInfo!=null and userInfo!=''">
user_info=#{userInfo},
</if>
<if test="headImg!=null">
head_img=#{headImg},
</if>
<if test="createTime!=null">
create_time=#{createTime},
</if>
id=#{id}
where id=#{id}
</update>
<!--
4.1.3 在INSERT动态插入列中使用if
需求:
在数据库中插入数据的时候,如果某一列的参数值不为空,就使用传入的值,如果传入
的参数为空,就使用数据库中的默认值(通常是空),而不使用传入的空值。
-->
<insert id="insert2" useGeneratedKeys="true" keyProperty="id">
INSERT INTO sys_user
(id,user_name,user_password,
<if test="userEmail!=null and uerEmail!=''">
user_email,
</if>
user_info,head_img,create_time)
VALUES
(#{id},#{userName},#{userPassword},
<if test="userEmail!=null and uerEmail!=''">
#{userEmail},
</if>
#{userInfo},#{headImg,jdbcType=BLOB},#{createTime,jdbcType=TIMESTAMP})
</insert>
From《MyBatis从入门到精通》
MyBatis if标签的用法的更多相关文章
- MyBatis bind标签的用法
From<MyBatis从入门到精通> <!-- 4.5 bind用法 bind标签可以使用OGNL表达式创建一个变量并将其绑定到上下文中. 需求: concat函数连接字符串,在M ...
- MyBatis foreach标签的用法
From<MyBatis从入门到精通> 一.foreach实现in集合 1.映射文件中添加的代码: <!-- 4.4 foreach用法 SQL语句有时会使用IN关键字,例如id i ...
- MyBatis select标签的用法
From<MyBatis从入门到精通> 第一步,在接口中添加方法: public interface UserMapper { SysUser selectById(Long id); } ...
- mybatis001-动态标签Trim用法
Mybatis动态标签Trim用法 一.<trim></trim>标签用法 示例一: select * from user <trim prefix="WHER ...
- 9.mybatis动态SQL标签的用法
mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...
- SpringMVC +mybatis+spring 结合easyui用法及常见问题总结
SpringMVC +mybatis+spring 结合easyui用法及常见问题总结 1.FormatString的用法. 2.用postAjaxFillGrid实现dataGrid 把form表单 ...
- Mybatis foreach标签含义
背景 考虑以下场景: InfoTable(信息表): Name Gender Age Score 张三 男 21 90 李四 女 20 87 王五 男 22 92 赵六 女 19 94 孙七 女 23 ...
- Java-MyBatis-杂项: MyBatis 中 in 的用法2
ylbtech-Java-MyBatis-杂项: MyBatis 中 in 的用法2 1.返回顶部 1. 一.简介 在SQL语法中如果我们想使用in的话直接可以像如下一样使用: select * fr ...
- Java-MyBatis:MyBatis 中 in 的用法
ylbtech-Java-MyBatis-杂项:MyBatis 中 in 的用法 1.返回顶部 1. foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元 ...
随机推荐
- 【转】在C#中简单的科学计算,包括幂数,指数,对数,Math类
用Math类进行一些简单的科学计算,包括幂数,指数,对数等的计算: double m,n; m=Math.Exp(0.5); //自然对数e的0.5次方 n=Math.Exp(); //自然对数e的3 ...
- spring bean 加载过程(spring)
以classpathXmlApplication为例 入口方法包含3个部分, public ClassPathXmlApplicationContext(String[] configLocation ...
- window8 飘带与页面切换效果
演示效果如下 用鼠标点击滑动试试就能看到效果了 ^_^ iscroll 不仅可以做到自然滚动条的效果,看官方文档还可以用来做页面切换的效果,很好很强大. 所以我结合流行的飘带元素做了个简单的例子.. ...
- C++界面库(十几种,很全)
刚开始用C++做界面的时候,根本不知道怎么用简陋的MFC控件做出比较美观的界面,后来就开始逐渐接触到BCG Xtreme ToolkitPro v15.0.1,Skin++,等界面库,以及一些网友自 ...
- es6基本语法,vue基本语法
一.es6基本语法 0.es6参考网站 http://es6.ruanyifeng.com/#README 1.let 和 const (1)const特点: 只在局部作用域起作用 不存在变量提升 不 ...
- IOS关于数据加密(主要为登录加密)想总结的
首先上来就来说一下,IOS常见的几种加密算法 *哈希(散列)函数 : MD5.SHA *对称加密算法:DES.3DES.AES *非对称加密算法:RSA 一.哈希(散列)函数 1.MD5 MD ...
- Google Earth Engine城市水体提取
Google Earth Engine城市水体提取 大家都知道城市水体提取相比较于山区,丘陵的地区,肯定是比较难的,为什么呢,因为城市水体有很多高层建筑导致的阴影,这个就非常复杂了,而且现在很多高分影 ...
- C++标准库(体系结构与内核分析)(侯捷第一讲)
一.C++标准库介绍 C++标准库:C++ Standard Library C++标准库与STL有什么关系: STL:Standard Template Library STL包含6大部件,基本占标 ...
- Storm 学习之路(五)—— Storm编程模型详解
一.简介 下图为Strom的运行流程图,在开发Storm流处理程序时,我们需要采用内置或自定义实现spout(数据源)和bolt(处理单元),并通过TopologyBuilder将它们之间进行关联,形 ...
- HBase 学习之路(一)—— HBase简介
一.Hadoop的局限 HBase是一个构建在Hadoop文件系统之上的面向列的数据库管理系统. 要想明白为什么产生HBase,就需要先了解一下Hadoop存在的限制?Hadoop可以通过HDFS来存 ...