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元 ...
随机推荐
- Hamcrest、Mockito 专题
UT中需要的jar Junit4.1X.jar hamcrest-library-1.x.jar hamcrest-core-l.x.jar mockito-all-1.10.x.jar Junit ...
- Win10《芒果TV》商店内测版更新至v3.7.65.0:跨平台UI新体验,铺路SP
Win10<芒果TV - Preview>是Win10<芒果TV>官方唯一指定内测预览版,最新的改进和功能更新将会在此版本优先体验. 春去夏来,初心犹在,Win10<芒果 ...
- 类选择器和所作用的标签一起写为什么不起作用? - CSDN博客
原文:类选择器和所作用的标签一起写为什么不起作用? - CSDN博客 HTML代码: css样式: 这不是将样式作用于circle类下的有current类的li标签吗?为什么不起作用? 原因: 选择器 ...
- UWP 双向绑定,在ListView中有个TextBox,怎么获取Text的值
要求:评论宝贝的时候一个订单里面包含多个产品,获取对产品的评论内容哦 1. xaml界面 <ListView x:Name="lvDetail"> <ListVi ...
- C++迭代器 iterator
1. 迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型.(1) 每种容器类型都定义了自己的迭代器类型,如vector:vector<int>::iterator iter ...
- VC控件自绘制三步曲
http://blog.csdn.net/lijie45655/article/details/6362441 实现自定义绘制的三步曲 既然您已经了解了绘制控件可用的各种选项(包括使用自定义绘制的好处 ...
- HTML连载15-文本属性&颜色控制属性
一.文本装饰的属性 1.格式:text-decoration:underline; 2.取值: (1)underline代表下划线 (2)line-through代表删除线 (3)overline代表 ...
- vuejs 使用less
当所有东西都 准备好之后 : 第一步: 安装less依赖, npm install less less-loader --save 第二步: 修改webpack.config.js文件,配置loade ...
- python算法与数据结构-循环链表(39)
一.循环链表的介绍 上一篇我们已经讲过单链表,本篇给大家讲解循单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点,其基本操作和单链表思路一样. 常用的操 ...
- 中转Webshell 绕过安全狗(一)
前言 听说中国菜刀里有后门.抓包我是没有监测到异常数据包.为了以防万一,且更好使用中国菜刀硬杠安全狗.笔者收集了一下资料.无耻的copy大佬的源码,只是在大佬的基础上简单修改了一下,达到Webshel ...