首页 > 数据库 >Mysql中where if问题

Mysql中where if问题

时间:2022-12-08 14:36:08浏览次数:38  
标签:BLOG like title 标签 问题 Mysql where SELECT

网上关于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>

标签:BLOG,like,title,标签,问题,Mysql,where,SELECT
From: https://www.cnblogs.com/Yikolemon/p/16965969.html

相关文章

  • nohup &退出shell终端后,服务仍然断开问题处理
    当用nohup执行任意脚本或命令,例如:nohupscp-rzczyrepos/[email protected]:/data/svnWebUI/repo/&nohup后台运行命令,关闭shell后再次进入shell发现进程在但是已经卡......
  • 元宇宙的设计面临着什么样的问题和挑战?
     元宇宙中涉及到的商机确实是巨大的。娱乐业、游戏业、出版业,甚至快餐和奢侈品牌行业都在尝试从预估的8000亿美元的市场中分一杯羹。但其实,目前我们才刚刚开始接触Web3领域......
  • Where is the “Father of Java?”
    Thisarticlewasoriginallypostedby ​​TylerHamilton​​ inthe ​​Toronto Star​​.Itisn’toftenthatweremembertheoriginatorsofideasandprod......
  • 对于CocoaPods的简单理解,实践安装使用过程和常见问题
    (本文是自己通过其他文章进行的自我编辑和简单修改,请大家凑活看看。)一、什么是CocoaPodsCocoaPods是iOS项目的依赖管理工具,该项目源码在Github上管理。开发iOS项目不可避免地......
  • linux问题定位中ftrace和strace使用。
    最近在定位问题过程中,有些涉及到内核,有些涉及到用户面,有些是两则之间都有。通过咨询牛人,推荐ftrace使用。最后问题得到了解决,下面记录下ftrace和strace简单使用的介绍。......
  • Spring如何处理循环依赖问题
    Spring如何处理循环依赖问题什么是循环依赖:就是多个bean之间相互依赖,形成了一个闭环,比如beanA需要引用BeanB,BeanB需要引用BeanA,形成循环关系。一般默认在单例模式中,属性......
  • 容量测试解决了什么问题?
    前面几篇性能测试知识科普系列的文章,介绍了性能测试中的核心术语和指标、常用测试策略、压测工具选型、性能需求分析、测试能力分层、新手学习路径以及监控分析工具相关的......
  • labelme 安装使用及常见问题解决
    (目录)写在前面,本文为作者本人在学习使用labelme过程中遇到的各种问题,记录于此,希望对其他同学有所帮助。1.labelme安装labelme是麻省理工(MIT)的计算机科学和人工智能实验......
  • MySQL空间暴涨150G导致锁定,发生了什么
     背景12月1号中午突然收到大量报警,某客户环境操作数据库大量失败,报错信息如下图所示:这个报错我是第一次见,一时间有点无所适从,但是从字面意思来看是MySQL目前处于LOCK......
  • mysql group by 实现组内排序
    1、同一个分组中假如有三条数据,我们想要获取指定的第一条数据,作为查出来的数据2、第一步:通过时间排序,并将id拼接起来,截取第一个id,(也就是最新的一条id)selectSUBSTRING_......