【Mybatis系列】Mybatis空值关联

这篇具有很好参考价值的文章主要介绍了【Mybatis系列】Mybatis空值关联。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
【Mybatis系列】Mybatis空值关联,s5 数据库,mybatis

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

一.问题描述

1.已知条件

已知 table_1 有 3 个字段 order_no,community_id,post_id

已知 table_2 也有 3 个字段 order_no,community_id,post_id

2.关联条件

现在需要将 table_1 和 table_2 进行关联,关联条件是 order_no,community_id,post_id 这 3 个字段,但是 order_no 不为 null,不过 community_id,post_id 是可能为 null,也可能不为 null

3.初步解法

如以下 SQL 所示,发现结果为空,没有查询到数据,实际是有数据,问题在于 community_id 和 post_id 对于空值的处理。

<select id="totalPageInfo" resultType="com.kwan.springbootkwan.entity.dto.CsdnTotalIncomeDTO">
    SELECT t1.receiver_nick_name AS nickName
    , SUM(t1.received_money) AS amount
    FROM table_1 t1 left join table_2 t2
    on t1.order_no = t2.order_no
           AND t1.community_id=t2.community_id
           AND t1.post_id=t2.post_id
    WHERE 1 = 1
    <if test="query.startDate != null">
        AND t1.receive_time <![CDATA[>= #{query.startDate}]]>
        AND t2.create_time <![CDATA[>= #{query.startDate}]]>
    </if>
    <if test="query.endDate != null">
        AND t1.receive_time <![CDATA[<= #{query.endDate}]]>
        AND t2.create_time <![CDATA[<= #{query.endDate}]]>
    </if>
    GROUP BY nickName
    ORDER BY amount DESC
</select>

二.解决方案

1.SQL 如下

<select id="totalPageInfo" resultType="com.kwan.springbootkwan.entity.dto.CsdnTotalIncomeDTO">
    SELECT t1.receiver_nick_name AS nickName
    , SUM(t1.received_money) AS amount
    FROM table_1 t1 left join table_2 t2
    on t1.order_no = t2.order_no
    <![CDATA[
           AND t1.community_id   <=> t2.community_id
           AND t1.post_id<=> t2.post_id
    ]]>
    WHERE 1 = 1
    <if test="query.startDate != null">
        AND t1.receive_time <![CDATA[>= #{query.startDate}]]>
        AND t2.create_time <![CDATA[>= #{query.startDate}]]>
    </if>
    <if test="query.endDate != null">
        AND t1.receive_time <![CDATA[<= #{query.endDate}]]>
        AND t2.create_time <![CDATA[<= #{query.endDate}]]>
    </if>
    GROUP BY nickName
    ORDER BY amount DESC
</select>

2.解释说明

在这个 SQL 查询中,由于 community_idpost_id 可能为空,你可以通过使用 COALESCE 函数或 IFNULL 函数(具体取决于你使用的数据库系统)来处理可能的空值情况。

下面是一种修改方式,假设你使用的是 MySQL 数据库:

SELECT
    t1.receiver_nick_name AS nickName,
    SUM(t1.received_money) AS amount
FROM
    table_1 t1
LEFT JOIN
    table_2 t2 ON t1.order_no = t2.order_no
                        AND t1.community_id <=> t2.community_id
                        AND t1.post_id <=> t2.post_id
WHERE
    1 = 1
    <if test="query.startDate != null">
        AND t1.receive_time <![CDATA[>= #{query.startDate}]]>
        AND t2.create_time <![CDATA[>= #{query.startDate}]]>
    </if>
    <if test="query.endDate != null">
        AND t1.receive_time <![CDATA[<= #{query.endDate}]]>
        AND t2.create_time <![CDATA[<= #{query.endDate}]]>
    </if>
GROUP BY
    nickName
ORDER BY
    amount DESC

在这里,使用了 <=> 操作符,它在 MySQL 中用于处理 NULL 值的比较。如果 community_idpost_id 的其中一个是 NULL,那么 <=> 操作符会返回 true。

请根据你使用的数据库类型来调整语法。如果是其他数据库,可能会使用 COALESCEIS NULL 等不同的语法。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

【Mybatis系列】Mybatis空值关联,s5 数据库,mybatis文章来源地址https://www.toymoban.com/news/detail-796480.html

到了这里,关于【Mybatis系列】Mybatis空值关联的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis查询数据库(2)

    目录 前言🍭 一、增删查改操作🍭 1、查🍉 Ⅰ、mapper接口:🍓 Ⅱ、UserMapper.xml 查询所有用户的具体实现 SQL:🍓 Ⅲ、进行单元测试🍓 2、增、删、改操作🍉 Ⅰ、增🍓 添加用户🍒 添加用户并且返回自增 id🍒 Ⅱ、改🍓 根据id修改用户名🍒 开启 MyBatis sql 日志打印🍒 Ⅲ、

    2024年02月16日
    浏览(45)
  • MyBatis操作数据库实现

    说明:MyBatis是作用于三层架构开发,数据访问层(Data Access Object)的框架,用于访问数据库,对数据进行操作。 首先,创建一个SpringBoot模块,然后把MyBatis的环境搭建起来。因为MyBatis是作用于Dao层的,故先省去Service层,重点关注Dao层中与数据库的交流。 (1)创建Springboot模

    2024年02月08日
    浏览(54)
  • MyBatis查询数据库(4)

    ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 终于到了MyBatis最后一篇,这篇讲的是 动态SQL的使用。 动态 SQL 是Mybatis的强大特性之⼀,能够完成不同条件下不同的 SQL 拼接。 可以参考官

    2024年02月14日
    浏览(55)
  • MyBatis查询数据库(3)

    ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 前面我们讲解了MyBatis增删改查基本操作,下面我们来深入了解MyBatis其中不同和需要注意的地方。 下面我们来实现⼀下根据用户 id 查询用户

    2024年02月14日
    浏览(48)
  • MyBatis查询数据库(1)

    ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 经过前⾯的学习咱们 Spring 系列的基本操作已经实现的差不多了,接下来,咱们来学习更重要的知识,将前端传递的数据存储起来,或者查询

    2024年02月15日
    浏览(74)
  • 【Java】Mybatis查询数据库

    经过前面的学习Spring系列的操作已经差不多了,接下来我们继续学习更加重要的知识,将前端传递的参数存储起来,或者查询数据库里面的数据 MyBatis是款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis几乎祛除了所有的JDBC代码以及设置参数和获取结果集

    2024年01月18日
    浏览(59)
  • 超细详解MyBatis操作数据库(1)

    MyBatis 是⼀款优秀的持久层框架,它⽀持⾃定义 SQL、存储过程以及⾼级映射。 MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作。 MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接⼝和 Java POJO(Plain Old Java Objects,普通⽼式 Java 对象)为数据库中的

    2024年02月04日
    浏览(44)
  • MyBatis Plus 数据库字段加密处理

    当项目开发到一半,可能突然客户会要求对数据库里面比如手机号、身份证号的字段进行加密; 在保证开发最快、影响范围最小的情况下,我们需要选择一种介于数据库和代码之间的工具来帮我们实现自动加解密; 这里我们选用AES对称加密算法,因为它是可逆算法。 AES加密

    2024年02月07日
    浏览(61)
  • 使用MyBatis操作数据库及单元测试

    目录 一.MyBatis介绍 二.MyBatis操作数据库步骤 三.单元测试 idea上生成测试  配置mybatis日志 动态参数 MyBatis是⼀款优秀的持久层框架,⽤于简化JDBC的开发。 JDBC来操作数据库太复杂了,使用MyBatis 是因为它可以帮助我们更⽅便、更快速的操作数据库。 1. 创建springboot工程, 并导入

    2024年02月03日
    浏览(50)
  • MyBatis 查询数据库、持久层框架简介

    MyBatis是一款优秀的持久层框架,支持自定义SQL、存储过程以及高级映射。它通过简单的XML或注解来配置和映射原始类型、接口和Java POJO为数据库中的记录。

    2024年02月12日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包