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

【 MyBatis 】| 关于多表联查返回 List 集合只查到一条的 BUG

目录

  • 一. 🦁 写在前面
  • 二. 🦁 探索过程
    • 2.1 开端 —— 开始写 bug
    • 2.2 发展 —— bug 完成
    • 2.3 高潮 —— bug探究
    • 2.4 结局 —— 效果展示
  • 三. 🦁 写在最后

权限管理

一. 🦁 写在前面

今天又是 BUG 气满满的一天,一个 xxxMapper.xml 因主键id 重复而出现的 bug 献上!

二. 🦁 探索过程

2.1 开端 —— 开始写 bug

就在刚刚,🦁 在写项目的时候,在实现一个多表联查的功能时,遇到一个不可描述的 BUG,我写完SQL 测试完成才去项目配置相关映射的!SQL 如下:

SELECTa.id,a.username,r.id ,r.role_name,r.role_desc,p.id ,p.permission_name,p.url 
FROM`admin` aLEFT JOIN admin_role ON a.id = admin_role.aidLEFT JOIN `role` r ON admin_role.rid = r.idLEFT JOIN role_permission ON r.id = role_permission.ridLEFT JOIN permission p ON role_permission.pid = p.id 
WHEREa.id = 133622996

测试结果如下:

在这里插入图片描述
一点毛病没有!

2.2 发展 —— bug 完成

当我自信满满回到项目中,配置完相关代码后(因为时多表查询,所以需要配置一个 xxxMapper.xml 文件):

   <select id="findById" parameterType="long" resultMap="adminMapper">SELECT a.id,a.username,r.id ,r.role_name,r.role_desc,p.id ,p.permission_name,p.urlFROM `admin` aLEFT JOIN admin_roleON a.id = admin_role.aidLEFT JOIN `role` rON admin_role.rid = r.idLEFT JOIN role_permissionON r.id = role_permission.ridLEFT JOIN permission pON role_permission.pid = p.idWHERE a.id = #{aid}
</select>

adminMapper 配置如下:

<resultMap id="adminMapper" type="com.lion.online.pojo.Admin"><id property="id" column="id"></id><result property="username" column="username"></result><collection property="roles" column="id" ofType="com.lion.online.pojo.Role"><id property="id" column="id"></id><result property="roleName" column="role_name"></result><result property="roleDesc" column="role_desc"></result><collection property="permissions" column="id" ofType="com.lion.online.pojo.Permission"><id property="id" column="id"/><result property="permissionName" column="permission_name"></result><result property="url" column="url"></result></collection></collection>
</resultMap>

运行控制台结果和数据库查询的结果一样:

在这里插入图片描述
正当一切都是朝着正轨走的时候,页面运行的结果却长这样:
在这里插入图片描述
🦁 已经亚麻住了… … 想起了手机中的这个表情包:

在这里插入图片描述

2.3 高潮 —— bug探究

出现这个结果始料不及,于是去搜了一下,发现也有很多 冤大头 出现了和我一样的错误,终于知道问题出现在哪里!
原因是在构造返回类型的时候使用了 ResultMap 标签,但是由于我的数据库表主键名字都是 id,所以在 ResultMap 中出现了多个同样的 id 字段,导致分表的 id 值和主表一样(简单来说就是Mybatis在查询时,对这几个都长得一样的id 混乱了!)。知道了问题,我们就可以着手解决了:

  • 配置 collection 一对多关联的话需要改 column 别名,否则查询出来条数不对!
  • 在 ResultMap 中,property 属性对应实体类中的属性,而 column 属性严格来说对应结果集中的列名,而不是数据库中的列名。
    • 例如,如果对列起了别名,那么 column 属性对应的就是别名,而不是原来的列名

改动如下:

  • resultMap 修改 column 列名:
    在这里插入图片描述
  • 代码使用别名
    在这里插入图片描述

2.4 结局 —— 效果展示

在这里插入图片描述

三. 🦁 写在最后

一个 BUG 赠给屏幕前的你!望君喜欢。


在这里插入图片描述

🦁 其它优质专栏推荐 🦁

🌟《Java核心系列(修炼内功,无上心法)》: 主要是JDK源码的核心讲解,几乎每篇文章都过万字,让你详细掌握每一个知识点!

🌟 《springBoot 源码剥析核心系列》:一些场景的Springboot源码剥析以及常用Springboot相关知识点解读

欢迎加入狮子的社区:『Lion-编程进阶之路』,日常收录优质好文

更多文章可持续关注上方🦁的博客,2023咱们顶峰相见!

相关文章:

【 MyBatis 】| 关于多表联查返回 List 集合只查到一条的 BUG

目录 一. &#x1f981; 写在前面二. &#x1f981; 探索过程2.1 开端 —— 开始写 bug2.2 发展 —— bug 完成2.3 高潮 —— bug探究2.4 结局 —— 效果展示 三. &#x1f981; 写在最后 一. &#x1f981; 写在前面 今天又是 BUG 气满满的一天&#xff0c;一个 xxxMapper.xm…...

PL/SQL的词法单元

目录 字符集 标识符 分隔符 注释 oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 PL/SQL块中的每一条语句都必须以分号结束。 一个SQL语句可以跨多行&#xff0c;但分号表示该语句的结束:一行中也可以有多条 SQL语句&…...

第三十二天-PythonWeb主流框架-Django框架

目录 1.介绍 发展历史 介绍 2.使用 1.安装 2.创建项目 3.项目结构 4.启动 3.开发流程 1.设置ip可访问 2.创建模块 3.第一个页面 4.视图 5.include()参数 6.url与视图的关系 7.响应内容 4.视图处理业务逻辑 1.响应html 2.获取url参数 3.从文件响应html内容 …...

利用python搭建临时文件传输服务

场景 如果想从一台服务器上传输文件又多种方法&#xff0c;其中常见的是利用scp进行传输&#xff0c;但是需要知道服务器的账号密码才能进行传输&#xff0c;但有时候我们并不知道账号密码&#xff0c;这个时候我们就可以通过python -m SimpleHTTPServer 命令进行传输文件 启…...

详解 WebWorker 的概念、使用场景、示例

前言 提到 WebWorker,可能有些小伙伴比较陌生,不知道是做什么的,甚至不知道使用场景,今天这篇文章就带大家一起简单了解一下什么是 webworker! 概念 WebWorker 实际上是运行在浏览器后台的一个单独的线程,因此可以执行一些耗时的操作而不会阻塞主线程。WebWorker 通过…...

IOS面试题编程机制 6-10

6. 如何理解MVVM设计模式?MVVM即 Model-View-ViewModel 1.View主要用于界面呈现,与用户输入设备进行交互 2.ViewModel是MVVM架构中最重要的部分,ViewModel中包含属性,方法,事件,属性验证等逻辑,负责View与Model之间的通讯 3.Model就是我们常说的数据模型,用于数据的构造…...

seleniumui自动化实例-邮箱登录

1.登录163邮箱源码&#xff1a; from selenium import webdriver driver webdriver.Firefox() driver.get("http://www.163.com") driver.find_element_by_id("id").clear() driver.find_element_by_id("id").send_keys("用户名")…...

力扣练习 3.27

121. 买卖股票的最佳时机 贪婪思想&#xff1a;力争在最低成本买入&#xff0c;最高利润卖出。 [7,1,5,3,6,4] 可以先假设在第一天买入和卖出&#xff0c;这时最低成本是7&#xff0c;最大利润是7-70 然后假设在第二天买入和卖出&#xff0c;成本就是1&#xff0c;利润也是0 第…...

C 指向指针的指针

指向指针的指针是一种多级间接寻址的形式&#xff0c;或者说是一个指针链。通常&#xff0c;一个指针包含一个变量的地址。当我们定义一个指向指针的指针时&#xff0c;第一个指针包含了第二个指针的地址&#xff0c;第二个指针指向包含实际值的位置。 一个指向指针的指针变量…...

通俗易懂:新生代、老年代和永久代/元空间的具体含义是什么?

在Java虚拟机&#xff08;JVM&#xff09;的内存管理中&#xff0c;堆内存通常被划分为几个不同的区域&#xff0c;以便更有效地管理和回收内存。以下是新生代&#xff08;Young Generation&#xff09;、老年代&#xff08;Old Generation&#xff09;和永久代/元空间&#xf…...

Centos7.9备份mysql数据库

1. 备份 备份shell脚本 [rootiZoqvrzbtnzd6kZ local]# vi mysql_backup.sh #!/bin/bash #设置MySQL登录信息 MYSQL_USER"root" MYSQL_PASSWORD"**********" MYSQL_DATABASE"ubox" BACKUP_DIR"/usr/local/mysql_backup" MONTH"…...

Automatic Prompt Engineering

让大模型自己生成prompt&#xff0c;生成提示&#xff08;prompt&#xff09;存在两种不同的操作方式。第一种方式是在文本空间中进行&#xff0c;这种提示以离散的文本形式存在。第二种方式是将提示抽象成一个向量&#xff0c;在特征空间中进行操作&#xff0c;这种提示是抽象…...

Spring高级面试题-2024

Spring 框架中都用到了哪些设计模式&#xff1f; 1. 简单工厂&#xff1a; ○ BeanFactory&#xff1a;Spring的BeanFactory充当工厂&#xff0c;负责根据配置信息创建Bean实例。它是一种工厂模式的应用&#xff0c;根据指定的类名或ID创建Bean对象。2. 工厂方法&#xff…...

用BSP优化3D渲染

3D渲染引擎设计者面临的最大问题之一是可见性计算&#xff1a;只必须绘制可见的墙壁和物体&#xff0c;并且必须以正确的顺序绘制它们&#xff08;应该在远处的墙壁前面绘制近墙&#xff09; 。 更重要的是&#xff0c;对于游戏等应用程序来说&#xff0c;开发能够快速渲染场景…...

Composer常见错误解决

Composer 是 PHP 社区广泛使用的一个依赖管理工具&#xff0c;它帮助开发者定义、管理和安装项目所需的库。在使用 Composer 的过程中&#xff0c;可能会遇到各种错误和问题。以下是一些常见的 Composer 错误及其解决方法&#xff1a; 1. 内存限制错误 错误信息&#xff1a;P…...

amazon中sns的使用

使用网页配置订阅 创建主题>使用标准>自定义名称>其他默认 点击创建即可 创建订阅 订阅策略配置&#xff08;不配置&#xff0c;会推送给多个人&#xff0c;除非你每个都创建主题&#xff09; 注意&#xff1a; 可以你可以随便写&#xff0c;后面的值只能是对象&am…...

web前端面试题----->VUE

Vue的数据双向绑定是通过Vue的响应式系统实现的。具体原理&#xff1a; 1. Vue会在初始化时对数据对象进行遍历&#xff0c;使用Object.defineProperty方法将每个属性转化为getter、setter。这样在访问或修改数据时&#xff0c;Vue能够监听到数据的变化。 2. 当数据发生变化时…...

计算机领域热门技术词汇

文章目录 计算机领域热门技术词汇1、机器学习 machine learning2、神经网络 neural network3、深度学习 deep learning4、自然语言处理 natural language processing5、计算机视觉 computer vision6、大数据 big data7、数据挖掘 data mining&#xff08;DM&#xff09;8、云计…...

jsp指令和动作

1.page指令&#xff1a;描述页面信息 pageENcoding:软件编码 contentType&#xff1a;浏览器编码 2.include指令&#xff1a;将多个网页合成一个网页&#xff0c;静态包含网页 问题&#xff1a;1.在网页源代码中&#xff0c;会形成错误的多遍代码&#xff0c;将主页面代码和…...

手撕算法-最小覆盖子串

描述 分析 滑动窗口。 参考力扣官方的题解思路 本问题要求我们返回字符串 s 中包含字符串 t 的全部字符的最小窗口。我们称包含 t 的全部字母的窗口为「可行」窗口。 我们可以用滑动窗口的思想解决这个问题。在滑动窗口类型的问题中都会有两个指针&#xff0c;一个用于「延伸…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...