MyBatis where、set、trim标签的用法
2024-09-01 00:48:55
<!-- 4.3.1 where用法 <where>标签的作用:如果该便签包含的元素中有返回值,就插入一个where;如果 where后面的字符串是一and或or开头的,就将它们剔除掉。 案例分析 当if条件不满足的时候,where元素中没有任何内容,所以SQL中不会出现where,也就 不存在4.1.1节中的SQL错误的问题。如果if条件满足,where元素的内容就是以and开 头的条件,where会主动去掉开头的and,这也能保证where条件正确。 ——很尴尬的一点,这样的化,反倒会将整张表都给查出来。。。 --> <select id="selectByUser" resultType="tk.mybatis.simple.model.SysUser"> SELECT id, user_name userName, user_password userPassword, user_email userEmail, user_info userInfo, head_img headImg, create_time createTime FROM sys_user <where> <if test="userName != null and userName != ''"> AND user_name LIKE CONCAT('%',#{userName},'%') </if> <if test="userEmail != null and userEmail != ''"> AND user_email = #{userEmail} </if> </where> </select> <!-- 4.3.2 set用法 <set>标签的作用:如果该标签包含的元素中有返回值,就插入一个set;如果set 后面的字符串是以逗号结尾的,就将这个逗号剔除掉。 --> <update id="updateByIdSelective"> UPDATE sys_user <set> <if test="userName != null and userName != ''"> user_name = #{userName}, </if> <if test="userPassword != null and userPassword != ''"> user_password = #{userPassword}, </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,jdbcType=BLOB}, </if> <if test="createTime != null"> create_time = #{createTime,jdbcType=TIMESTAMP}, </if> id=#{id} </set> WHERE id=#{id} </update> <!-- 4.3.3 trim用法 <where>和<set>标签都可以用trim标签实现,并且底层就是通过TrimSqlNode实现的 <where>标签对应的trim实现: <trim prefix="WHERE" prefixOverride="AND |OR "> <set>标签对应的trim实现: <trim prefix="SET" suffixOverrides=","> 提示: prefixOverride中AND和OR后面的空格不能省略,为了避免匹配到andes或 orders等单词。实际上prefixOverride包含"AND""OR""AND\n""OR\n" "AND\r""OR\r""AND\t""OR\t" <trim>标签属性: prefix:当trim元素包含内容时,会给内容增加prefix指定的前缀 prefixOverride:当trim元素包含内容时,会把内容中匹配的前缀字符串去掉。 suffix:当trim元素包含内容时,会给内容增加prefix指定的后缀 suffixOverride:当trim元素包含内容时,会把内容中匹配的后缀字符串去掉。 -->
From《MyBatis从入门到精通》
最新文章
- Mellanox 8亿美元收购EZchip
- LINQ TO ENTITY 根据Birthday获取Age
- 命令cd
- 用DataSet方式更新数据库表
- 性能更好的js动画实现方式——requestAnimationFrame
- 【转】提供android 5.0 AOSP源码下载
- 快速排序算法C#实现
- python3 第七章 - 循环语句
- mysql执行计划简介
- C++ Primer 有感(管理类的指针成员)
- Snapde和Excel、PowerPivot、WPS打开超大CSV文件性能比较
- 基于python的unittest测试框架集成到jenkins(Mac)
- [Java初探外篇]__关于正则表达式
- 【372】Kaggle 相关经验
- SQL Server - 使用 Merge 语句实现表数据之间的对比同步
- Material Design In Action——重构bilibili客户端
- 【12c OCP】CUUG OCP认证071考试原题解析(36)
- Linux内核基础--事件通知链(notifier chain)good【转】
- ES6里关于类的拓展(二):继承与派生类
- Eclipse注释模板设置
热门文章
- SynchronizationContext笔记
- Bigtable:结构化数据的分布式存储系统
- Linux下的帮助命令
- msys2 安装笔记(可以按照这个关键字搜索)
- 发布Qt Widgets桌面应用程序的方法(自定义进程步骤,用QT Creator直接生成)
- java之继承中的静态变量
- 关于web系统整体优化提速总结
- chrome浏览器开发者工具F12中某网站的sources下的源码如何批量保存?
- Unity 通用透明物体漫反射Shader(双面渲染&;多光源&;光照衰减&;法线贴图&;凹凸透明度控制)
- Mac下安装redis5.0 与命令