当前位置: 首页 > news >正文

mybatis的sql中,如果一个条件column=#{column},column的值为null时,会不会匹配出column is null 的记录

在 MyBatis 的 SQL 映射文件中,当你使用 column = #{column}这种写法,并且传入的参数 column的值为 null时,​不会匹配出 column IS NULL的记录。

原因如下:

  1. SQL 语义:​

    • column = NULL在 SQL 中是一个无效的比较。在 SQL 标准中,任何值与 NULL进行比较(使用 =<><>等)的结果都是 UNKNOWN(不是 TRUE)。因此,column = NULL这个条件永远不会为 TRUE,也就不会返回任何行。

    • 要检查一个列是否为 NULL,必须使用专门的 IS NULL操作符。

  2. MyBatis 的参数替换:​

    • MyBatis 在执行 SQL 语句之前,会使用 JDBC 的 PreparedStatement进行参数替换。

    • 当参数 #{column}的值为 null时,MyBatis 会将其替换为 JDBC 的 NULL值(即 setNull(...))。

    • 最终发送到数据库的 SQL 语句看起来像这样:... WHERE column = NULL ...

    • 正如第 1 点所述,column = NULL在 SQL 中是不起作用的。

结果:​

  • column参数为 null时,column = #{column}这个条件相当于 column = NULL

  • column = NULL在 SQL 中总是求值为 UNKNOWN

  • 因此,​该条件不会匹配任何行,包括那些 column IS NULL的行。​

如何正确匹配 NULL?​

如果你希望在参数为 null时匹配 column IS NULL的记录,你需要使用 MyBatis 的动态 SQL 功能(通常是 <if>标签)来改变 SQL 语句的结构:

<select id="findByColumn" resultType="YourResultType">SELECT * FROM your_table<where><if test="column != null">column = #{column}</if><if test="column == null">column IS NULL</if></where>
</select>

  • <where>标签会智能地处理 WHERE关键字和 AND/OR的连接问题。

  • 第一个 <if test="column != null">:当参数 column的值不为 null时,生成 column = #{column}条件。

  • 第二个 <if test="column == null">:当参数 column的值为 null时,生成 column IS NULL条件。

这样,无论参数 column是具体的值还是 null,你都能正确地查询到期望的记录:

  • 传入非 null值:匹配该值的记录。

  • 传入 null:匹配 column IS NULL的记录。

​在 MyBatis 中,直接使用 column = #{param}paramnull时,不会匹配 column IS NULL的记录。必须使用动态 SQL(如 <if>)根据参数值动态生成 = valueIS NULL条件才能实现预期的查询行为。

http://www.dtcms.com/a/536290.html

相关文章:

  • 购物商城系统搭建实战指南
  • 怎么做网站挣钱做一下网站收购废钢
  • 专业移动微网站建设玖玖建筑网
  • 无锡建行网站网站加速cdn
  • kafka使用-admin创建
  • 渗透测试中常见的网络端口
  • 超市进销存系统管理源码 超市管理系统源码
  • Python 文件常数引用
  • 钦州电商网站建设南京网络建站公司
  • TCP数据中转服务器/广播服务器(高并发TCP服务广播)winform.netcore(net8)
  • 实验室温湿度高精度采集与监控中心集中管理实施细则
  • set和map的封装(C++)
  • Python机器学习---7.实战案例:幸福指数分析
  • 大型网站建设淮安公司网站建设
  • 重庆简约型网站开发价格做教程网站资源放哪里有
  • axios封装实例
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(8):阶段复习
  • RabbitMQ死信队列详解
  • 信息消除不确定性的多维解析
  • Day12:Python实现邮件自动发送
  • 点亮LED
  • 家乡ppt模板免费下载网站地图 添加到网站
  • JMeter直连数据库的使用案例1
  • 网站备案ip查询系统上海十大营销策划公司排名
  • STM32H743-ARM例程31-CAN
  • Claude Code + 国产模型GLM-4.6 安装指南 (for Windows/Mac)
  • Docker 镜像导出与导入教程(Windows - Linux)
  • ARM《4》_在开发板上裸机编程实现GPIO编程控制LED灯闪烁
  • 手机商城 手机网站建设郴州今天几例
  • 从 Electron 转向 Tauri:用 Rust 打造更轻、更快的桌面应用