<if>标签

<select id="findActiveBlogWithTitleLike"resultType="Blog">SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null">AND title like #{title}</if>
</select>

if标签通常伴随着where,set出现。当增加查询条件的时候有下面的代码

<select id="findActiveBlogLike"resultType="Blog">SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null">AND title like #{title}</if><if test="author != null and author.name != null">AND author_name like #{author.name}</if>
</select>

但是当state属性也需要动态表示的时候则变成

<select id="findActiveBlogLike"resultType="Blog">SELECT * FROM BLOG WHERE <if test="state != null">state = #{state}</if> <if test="title != null">AND title like #{title}</if><if test="author != null and author.name != null">AND author_name like #{author.name}</if>
</select>

此时会出现当state为null时,sql语句会变为 select * from BLOG WHERE AND...解决此问题则引入<where><set>等标签.

<where>标签

<select id="findActiveBlogLike"resultType="Blog">SELECT * FROM BLOG <where> <if test="state != null">state = #{state}</if> <if test="title != null">AND title like #{title}</if><if test="author != null and author.name != null">AND author_name like #{author.name}</if></where>
</select>

where 元素知道只有在一个以上的if条件有值的情况下才去插入“WHERE”子句。而且,若最后的内容是“AND”或“OR”开头的,where 元素也知道如何将他们去除。

如果 where 元素没有按正常套路出牌,我们还是可以通过自定义 trim 元素来定制我们想要的功能。比如,和 where 元素等价的自定义 trim 元素为:

 
<trim prefix="WHERE" prefixOverrides="AND |OR ">...
</trim>

同理当需要更新数据时使用<set>标签

<update id="updateAuthorIfNecessary">update Author<set><if test="username != null">username=#{username},</if><if test="password != null">password=#{password},</if><if test="email != null">email=#{email},</if><if test="bio != null">bio=#{bio}</if></set>where id=#{id}
</update>

转载于:https://www.cnblogs.com/dyc940210/p/7371672.html

MyBatis中if,where,set标签相关推荐

  1. MyBatis中如何使用insert标签呢?

    转自: MyBatis中如何使用insert标签呢? MyBatis insert 标签的功能  MyBatis insert标签的功能,用于定义一个插入语句,执行插入操作,   MyBatis运行完 ...

  2. MyBatis中如何使用update标签呢?

    转自: MyBatis中如何使用update标签呢? MyBatis update 标签的功能: 用于定义一条更新语句,运行相关的更新操作. 当 MyBatis 执行完一条更新语句后,会返回一个整数, ...

  3. MyBatis中动态sql语句标签详解

    动态 SQL 通常写在mapper包下面的地址映射配置文件(.xml)中.根据条件的不同, SQL 语句也会随之动态的改变. MyBatis 中,提供了一组标签用于实现动态 SQL. 动态SQL语句标 ...

  4. main方法 如何去掉http debug日志_在MyBatis中如何使用collection标签实现嵌套查询?...

    # 需求升级 在上篇博客<一对多的关系,在MyBatis中如何映射?>中,我们实现了需求:根据用户id查询用户信息的同时获取用户拥有的角色. 因为角色可以拥有多个权限,所以本篇博客我们升级 ...

  5. 【每日学习Mybatis中基础】trim标签使用

    2019独角兽企业重金招聘Python工程师标准>>> 1.trim基础 trim标签的四个属性 prefix(前缀),prefixOverrides(去掉第一个and或者是or), ...

  6. mybatis中<choose>标签的用法

    choose 标签是按顺序判断其内部 when 标签中的 test 条件出否成立,如果有一个成立,则 choose 结束.当 choose 中所有 when 的条件都不满则时,则执行 otherwis ...

  7. Mybatis中<trim>标签用法

    trim标签的属性: prefix: 拼接sql需要加上的前缀. prefixOverrides:前缀需要覆盖消除的内容. suffix:拼接sql需要加上的后缀 suffixOverrides:后缀 ...

  8. mybatis collection标签_一对多的关系,在MyBatis中如何映射?

    # 使用collection标签 需求:根据用户id查询用户信息的同时获取用户拥有的角色,一个用户可以拥有1个或多个角色. 一般情况下,不建议直接修改数据库表对应的实体类. 所以这里我们延用之前博客中 ...

  9. Mybatis中Collection集合标签的使用

    mybatis简单的CURD就不用多说了,网上相关博客文档一大堆.分析一下Mybatis里面的collection聚集查询.  假设一个班级有多名学生为例,通过班级号查询出该班级的信息,和班级里面的所 ...

  10. mybatis中where标签和trim标签的区别以及使用

    mybatis中where和trim的区别以及使用 1.多个查询条件 2.where标签的使用 3.trim标签的使用 4.trim扩展 1.多个查询条件 在多个查询条件下,由于需要拼接sql语句,所 ...

最新文章

  1. 机器学习笔记 :LSTM 变体 (conv-LSTM、Peephole LSTM、 coupled LSTM、conv-GRU)
  2. MONO Design创建电信3D机房
  3. docker实现宿主机和容器之间数据共享
  4. 自适应 幻灯片代码 app_字节跳动 To B 再添一员,将推出飞书文档独立App | 36氪独家...
  5. html 边框轮廓,CSS半圈(边框,仅轮廓)
  6. less与SASS学习心得
  7. TCP连接建立与释放
  8. 微型 ORM-FluentData 实例详解
  9. 小腿抽筋了,按摩承山穴,外加念观世音菩萨是不是迷信
  10. python余弦定理求角_余弦定理计算文章相似度
  11. Kaldi语音识别:基于aidatatang模型实现自制语音数据的识别
  12. echarts如何在柱状图上显示百分比
  13. 郑捷《机器学习算法原理与编程实践》学习笔记(第三章 决策树的发展)(三)_Scikit-learn与回归树...
  14. 和数传媒:人工智能和区块链可能是典型应用
  15. win10远程桌面连接凭据怎么设置_win10远程桌面怎么保存密码?win10让远程桌面记住密码的方法...
  16. 迭代最近点(Iterative Closest Point, ICP)算法
  17. s3cmd 快速评估RADOSGW的性能
  18. android文件目录
  19. 有哪些小巧舒适的蓝牙耳机?推荐几款小巧且舒适的蓝牙耳机
  20. Sql处理数字保留两位小数,而且四舍五入。

热门文章

  1. cdb内存 oracle,【CDB】怎样修改PDB的内存参数
  2. linux音量模块,Linux下的音量控制器alsamixer
  3. mysql group 分页_【MySQL】条件查询之排序聚合分组分页查询
  4. 我是机器人布里茨_9.19机器人钩子范围增加,这些位置阴人无敌,一Q一个小朋友...
  5. java将图片变成圆角_android图片处理之让图片变成圆形
  6. 『设计模式』难道你现在还不知道:C/S和B/S
  7. Python函数式编程简介(二)返回函数
  8. 迁移学习 nlp_NLP的发展-第3部分-使用ULMFit进行迁移学习
  9. 使用Java解决您的数据科学问题
  10. alexnet 结构_AlexNet的体系结构和实现