news 2026/4/16 21:12:37

mybatis sql where a=#{a},如果a为null,会返回什么

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
mybatis sql where a=#{a},如果a为null,会返回什么

在 MyBatis 中,当使用#{a}占位符且参数anull时,SQL 语句会变成:

WHERE a = null

实际执行结果:不会有任何数据被查询出来,因为 SQL 中null = null的结果是unknown(相当于 false)。

详细说明

1.SQL 的 NULL 处理机制

在 SQL 中:

  • NULL表示"未知的值"或"缺失的值"

  • 任何与NULL的比较(=<><>等)都返回NULL(逻辑假)

  • 即使NULL = NULL也返回 NULL,而不是 true

  • 必须使用IS NULLIS NOT NULL来判断 NULL 值

2.MyBatis 示例

假设有以下映射:

<select id="findUsers" resultType="User"> SELECT * FROM users WHERE a = #{a} </select>

anull时:

  • 生成的 SQL:WHERE a = null

  • 执行结果:返回空结果集(0行数据)

3.解决方案

方案1:动态 SQL(推荐)
<select id="findUsers" resultType="User"> SELECT * FROM users <where> <if test="a != null"> AND a = #{a} </if> <if test="a == null"> AND a IS NULL </if> </where> </select>
方案2:使用<choose>
<select id="findUsers" resultType="User"> SELECT * FROM users WHERE <choose> <when test="a != null"> a = #{a} </when> <otherwise> a IS NULL </otherwise> </choose> </select>
方案3:数据库函数(不推荐)
<select id="findUsers" resultType="User"> SELECT * FROM users WHERE IFNULL(a, '') = IFNULL(#{a}, '') </select>

⚠️ 注意:这种方式有性能问题,且会干扰索引使用。

4.${}的区别

<!-- 使用 #{},安全 --> WHERE a = #{a} → WHERE a = null <!-- 使用 ${},危险!SQL注入风险 --> WHERE a = ${a} → WHERE a = null

两者结果相同,但${}是字符串替换,有 SQL 注入风险,不推荐使用。

5.最佳实践

  • 使用 MyBatis 的动态 SQL 处理 NULL 值

  • 在查询前先判断参数是否需要为 NULL

  • 考虑使用默认值替代 NULL:

// Service 层处理 public List<User> findUsers(String a) { if (a == null) { a = ""; // 或使用其他默认值 } return userMapper.findUsers(a); }

总结

WHERE a = #{a}anull时,查询不会报错,但返回空结果。这是因为 SQL 的逻辑特性决定的。实际开发中应该使用动态 SQL 来正确处理NULL值的查询。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 11:01:50

我如何作为数据工程师使用 Gen AI

原文&#xff1a;towardsdatascience.com/how-i-use-gen-ai-as-a-data-engineer-6a686a921c7b https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d13c048b9bc14280b1f5b5f5418dfcae.png 我使用 AI 的图片。图片由作者提供 引言 将生成式 …

作者头像 李华
网站建设 2026/4/16 9:17:05

FaceFusion在AI语言教师形象本地化中的实践案例

FaceFusion在AI语言教师形象本地化中的实践案例 在一场面向东南亚学生的在线英语课上&#xff0c;AI教师微笑着用标准发音示范句子&#xff0c;她的面部轮廓带着明显的东亚特征&#xff0c;眼神温和&#xff0c;随着语调自然地扬眉、点头。学生几乎察觉不到这并非真人直播——但…

作者头像 李华
网站建设 2026/4/16 12:47:07

我如何使用 LlamaIndex 工作流简化我的研究和演示过程

原文&#xff1a;towardsdatascience.com/how-i-streamline-my-research-and-presentation-with-llamaindex-workflows-3d75a9a10564?sourcecollection_archive---------3-----------------------#2024-09-10 一个通过 AI 工作流实现可靠性、灵活性和可控性的示例 https://me…

作者头像 李华
网站建设 2026/4/16 11:04:59

腾讯组织架构重大调整,背后的意图是?

见字如面&#xff0c;我是军哥&#xff01;36氪独家获悉&#xff0c;近期完成了一次组织调整&#xff0c;正式新成立AI Infra部、AI Data部、数据计算平台部。12月17日下午发布的内部公告中&#xff0c;腾讯表示&#xff0c;Vinces Yao将出任“CEO/总裁办公室”首席 AI 科学家&…

作者头像 李华
网站建设 2026/4/16 10:43:16

GPT-5 的 Memory 系统技术架构,比想象中简单太多了!

大家好&#xff0c;我是玄姐。当我询问 GPT-5 关于我的记忆时&#xff0c;它列出了 33 个事实&#xff0c;从我的名字、职业目标到当前的健身计划应有尽有。但它究竟是如何存储和检索这些信息的&#xff1f;为何整个过程会如此无缝自然&#xff1f;经过大量实验&#xff0c;我发…

作者头像 李华