多表关联查询有相同字段的解决方案

  • 问题描述
  • 现场还原
  • 解决方案
  • 总结反思

问题描述

我们要对数据库中的两张表进行管理查询,但是不幸的是这两张表有相同的字段名,导致最后查询出来的结果里这两个字段的值是相同的!很显然某一个被另一个给覆盖了,而原因就是:多表关联查询时有相同的字段名,解决方案其实很简单,定义结果集和查询的时候都取一个别名就可以了!

现场还原

试图将问题的本质反映清楚,所以我写的很简洁,只留下关键部分。

我参考了某个博主的类的定义,他写的很全。

实体类1:User.java

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Integer id;private String name;private Integer age;private String address;//一对多映射集合private List<Account> accounts;
}

实体类2:Account.java

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Account {private Integer id;private Integer uid;private Double money;
}

UserMapper 接口:

public interface UserMapper {List<User> findAllUser();
}

mapper.xml文件:下面写法是错误的,这样查出来的id只有一个

<mapper namespace="com.tedu.dao.UserMapper"><resultMap id="userAccountMap" type="user"><id column="id" property="id"/><result column="name" property="name"/><result column="age" property="age"/><result column="address" property="address"/><collection property="accounts" javaType="ArrayList" ofType="Account"><id column="id" property="id"/><result column="uid" property="uid"/><result column="money" property="money"/></collection></resultMap><select id="findAllUser" resultMap="userAccountMap">select    u.id, u.name, u.age, u.address,a.id, a.uid, a.moneyfrom user uleft join account aon u.id = a.uid;</select>

解决方案

要解决这个问题很简单,拿上面的例子来说,我们要给结果集userAccountMap的字段起个别名,然后在下面的select语句中查询时再给字段起个相同的别名:

<mapper namespace="com.tedu.dao.UserMapper"><resultMap id="userAccountMap" type="user"><id column="id1" property="id"/> <!--此处给父表的id起了别名id1--><result column="name" property="name"/><result column="age" property="age"/><result column="address" property="address"/><collection property="accounts" javaType="ArrayList" ofType="Account"><id column="id" property="id"/> <!--此处给子表的id起了别名id2--><result column="uid" property="uid"/><result column="money" property="money"/></collection></resultMap><select id="findAllUser" resultMap="userAccountMap">select     u.id id1, /*与结果集对应的别名id1*/u.name, u.age, u.address,a.id id2, /*与结果集对应的别名id2*/a.uid, a.moneyfrom user uleft join account aon u.id = a.uid;</select>

这么做就可以解决问题了。

总结反思

可能是刚刚工作不久的缘故,也或者是太久没碰后端开发了(刚考研结束),现在的开发基本模式基本都是复制粘贴修改。。。有点惭愧,找到解决方案后发现其实以前都学过这种写法,但是当时没有思考的那么深,很多地方跟着敲一敲就过去了,也没有去想为什么要这么做。。。今天捣鼓这个很简单的问题花了不少时间,实在是惭愧啊!以后工作中的学习还是要更深入,不能简单停留在复制粘贴上(虽然也可以完成大部分任务)。。。

MyBatis 多表关联相同字段的解决方案相关推荐

  1. ORACLE数据库多表关联查询效率问题解决方案

    ORACLE数据库多表关联查询效率问题解决方案 参考文章: (1)ORACLE数据库多表关联查询效率问题解决方案 (2)https://www.cnblogs.com/baib/p/5086777.h ...

  2. oracle多表关联多字段update

    多表关联多字段update 有代码有J8: update spatial_references set( auth_name, auth_srid, falsex, falsey, xyunits, ...

  3. mysql多数据表关联查询慢问题解决方案

    问题一:遇到一个问题,mysql库下表A有几万条数据:表B也有几万条数据,结果两表关联的时候,查询超级慢,30s内没反应. 问题一解决方案: 1. 加索引,但索引不要乱加,两表关联,必须要创建的索引是 ...

  4. mybatis 多表关联查询_Java修行第041天--MyBatis框架(下)--多表查询

    1 解决列名和属性名不一致问题 如果查询时使用 resultType 属性, 表示采用 MyBatis 的Auto-Mapping(自动映射)机制, 即相同的列名和属性名会自动匹配. 因此, 当数据库 ...

  5. java mybtis关联查询,iBatis/MyBatis 主子表关联查询

    主表:MASTER 字段:ORDER_ID  --主键 RELATE_ID --申请单位 STOCK_ADDRESS --仓库地址 TERMINAL_VENDER --供应商 PROVINCE_ID ...

  6. mybatis主从表关联查询,返回对象带有集合属性

    昨天有同事让我帮着看一个问题,mybatis主从表联合查询,返回的对象封装集合属性.我先将出现的问题记录一下,然后再讲处理方法也简单说明一下: VersionResult为接收返回数据对象,get\s ...

  7. mybatis多表关联映射

    数据准备: 在MySQL数据库中,创建一个名为mybatis的数据库,在此数据库中创建一个student表,course表以及sc表,同时预先插入几条数据.如图所示(下图只是表样例,具体数据记录自己编 ...

  8. MyBatis多表关联查询

    本文将向大家介绍 MyBatis 中的多表关联查询 主要通过两个示例来说明在 MyBatis 中如何实现 一对多,多对一 和 多对多 查询 第一个示例:老师和学生关联 ​ 老师和学生是一对多的关系,一 ...

  9. mybatis association表关联与rowbounds共同使用时的异常及其解决方案

    按照mybatis手册中所说的,association有两种实现方式,嵌套查询和嵌套结果映射.如手册中所述,select方式会带来N+1次查询的问题,考虑到效率问题的话建议使用嵌套结果映射.但是在结合 ...

最新文章

  1. openStack controller 管理网口TX数据量非常大 网络总是丢包
  2. 解Bug之路-Druid的Bug
  3. spring系列-注解驱动原理及源码-声明式事务使用及原理解析
  4. 卡尔曼滤波器学习笔记(二)
  5. PHP专题-开发基础(七)
  6. 【牛客 - NC93】设计LRU缓存结构(模拟)
  7. java springmvc注解详解_springMVC注解开发详解(转)
  8. sha256加密_有加密传输数据的需求?来试试stunnel
  9. 食物在人体内消化主要经过哪些步骤
  10. Exchange 技巧(1) Exchange2010 邮件收发统计
  11. python从入门到放弃-《Python3从入门到放弃》视频教程
  12. 201709020工作日记--synchronized、ReentrantLock、读写锁
  13. 完善的WebGis地图编辑器
  14. Mocha BSM产品亮点——SNMP Trap的支持
  15. android音频杂音问题_如何消除音频中的噪声?用这个简单好用的音频剪辑软件就够了...
  16. vue JsBarcode的使用
  17. 麒麟下适配mellanox网卡驱动
  18. H3C-云计算技术专题培训(分享七)
  19. Python的学习笔记案例8--空气质量指数计算1.0
  20. openGauss亮相VLDB2020,展示内存优化研究成果

热门文章

  1. python入门——P42魔法方法:算数运算1
  2. MySql字符串截取之substring_index
  3. LeetCode-返回倒数第 k 个节点
  4. Java static , final和常量设计
  5. openwrt添加自己的iptables的targe编译报错
  6. [leetcode]328. Odd Even Linked List
  7. 在SQL Server中解析和旋转定界数据
  8. power bi dax_M语言和Power BI中的DAX之间的差异
  9. 远程mysql用ssh连接_使用SSH密钥连接到远程MySQL服务器
  10. sql server死锁_SQL Server如何选择死锁受害者