网上关于Mybatis中where与if的说法乱七八糟的,Myabtis官网写的很清晰。为了防止误导他人,在此记录:

1.where语句+< if > 标签

<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>

直接写Where再使用< if > 标签会产生问题:

  1. 如果if都不成立,会变成:

    SELECT * FROM BLOG	WHERE

    该语句会出错

  2. 如果第一条if不成立,第2条/第3条成立

    SELECT * FROM BLOG	WHERE AND title like xxx

    多出现一个AND该语句也会出错

解决方案:

SELECT * FROM BLOG WHERE 1=1 加上<if>标签
  1. 使用标签,下面介绍

2.< where > 标签+< if > 标签

Mybatis为了解决上面的问题,给了< where >标签 ,直接解决了上面的两个问题

  1. 当全部不匹配的时候 where 不会出现在sql语句中

  2. 当第1个不匹配的时候,后面第一个成立的语句会自动去掉最前and

    (注意,AND需要写在最前,如果写在最后还会出现问题)

<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>

最新文章

  1. Kotlin开发语言文档(官方文档)-- 目录
  2. 点击repeater的一个修改事件触发全部repeater每一行的修改事件
  3. SQL控制语句中内置函数讲解
  4. [SQL]分组排练进行更新
  5. shell脚本的桩
  6. MySQL强制性操作
  7. 【可视化】Echarts3 在世界地图中绘制中国各省份的轮廓
  8. Android动态加载技术(插件化技术)
  9. ADO.NET学习(一)
  10. Linux安装Kafka
  11. Java与C/C++有什么区别?
  12. UEditor可以如何直接复制word的图文内容到编辑器中?
  13. (转)多线程——继承Thread 类和实现Runnable 接口的区别
  14. 关于话题模型(topic model)的一些思考
  15. openshift node资源限制
  16. 别人的Linux私房菜(3)主机规划与磁盘分区
  17. loli的搜索测试-4
  18. JS日期、时间 格式化转换方法
  19. 问答项目---用户注册的那些事儿(JS验证)
  20. SPA页面性能优化

热门文章

  1. HDLBits答案——Getting started
  2. (GDB) GDB调试技巧,调试命令
  3. python安装dlib库报错
  4. whylogs工具库的工业实践!机器学习模型流程与效果监控 ⛵
  5. [论文阅读] 颜色迁移-Correlated Color Space
  6. vue3 el-pagination 将 英文 修改 为 中文
  7. linux-微服务-jar包部署指令
  8. cs231n__4.2 神经网络 Neural networks
  9. 或许是市面上最强的 Mock 工具
  10. Centos7下git最新版本安装