MyBatis 多表关联相同字段的解决方案
多表关联查询有相同字段的解决方案
- 问题描述
- 现场还原
- 解决方案
- 总结反思
问题描述
我们要对数据库中的两张表进行管理查询,但是不幸的是这两张表有相同的字段名,导致最后查询出来的结果里这两个字段的值是相同的!很显然某一个被另一个给覆盖了,而原因就是:多表关联查询时有相同的字段名,解决方案其实很简单,定义结果集和查询的时候都取一个别名就可以了!
现场还原
试图将问题的本质反映清楚,所以我写的很简洁,只留下关键部分。
我参考了某个博主的类的定义,他写的很全。
实体类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 多表关联相同字段的解决方案相关推荐
- ORACLE数据库多表关联查询效率问题解决方案
ORACLE数据库多表关联查询效率问题解决方案 参考文章: (1)ORACLE数据库多表关联查询效率问题解决方案 (2)https://www.cnblogs.com/baib/p/5086777.h ...
- oracle多表关联多字段update
多表关联多字段update 有代码有J8: update spatial_references set( auth_name, auth_srid, falsex, falsey, xyunits, ...
- mysql多数据表关联查询慢问题解决方案
问题一:遇到一个问题,mysql库下表A有几万条数据:表B也有几万条数据,结果两表关联的时候,查询超级慢,30s内没反应. 问题一解决方案: 1. 加索引,但索引不要乱加,两表关联,必须要创建的索引是 ...
- mybatis 多表关联查询_Java修行第041天--MyBatis框架(下)--多表查询
1 解决列名和属性名不一致问题 如果查询时使用 resultType 属性, 表示采用 MyBatis 的Auto-Mapping(自动映射)机制, 即相同的列名和属性名会自动匹配. 因此, 当数据库 ...
- java mybtis关联查询,iBatis/MyBatis 主子表关联查询
主表:MASTER 字段:ORDER_ID --主键 RELATE_ID --申请单位 STOCK_ADDRESS --仓库地址 TERMINAL_VENDER --供应商 PROVINCE_ID ...
- mybatis主从表关联查询,返回对象带有集合属性
昨天有同事让我帮着看一个问题,mybatis主从表联合查询,返回的对象封装集合属性.我先将出现的问题记录一下,然后再讲处理方法也简单说明一下: VersionResult为接收返回数据对象,get\s ...
- mybatis多表关联映射
数据准备: 在MySQL数据库中,创建一个名为mybatis的数据库,在此数据库中创建一个student表,course表以及sc表,同时预先插入几条数据.如图所示(下图只是表样例,具体数据记录自己编 ...
- MyBatis多表关联查询
本文将向大家介绍 MyBatis 中的多表关联查询 主要通过两个示例来说明在 MyBatis 中如何实现 一对多,多对一 和 多对多 查询 第一个示例:老师和学生关联 老师和学生是一对多的关系,一 ...
- mybatis association表关联与rowbounds共同使用时的异常及其解决方案
按照mybatis手册中所说的,association有两种实现方式,嵌套查询和嵌套结果映射.如手册中所述,select方式会带来N+1次查询的问题,考虑到效率问题的话建议使用嵌套结果映射.但是在结合 ...
最新文章
- openStack controller 管理网口TX数据量非常大 网络总是丢包
- 解Bug之路-Druid的Bug
- spring系列-注解驱动原理及源码-声明式事务使用及原理解析
- 卡尔曼滤波器学习笔记(二)
- PHP专题-开发基础(七)
- 【牛客 - NC93】设计LRU缓存结构(模拟)
- java springmvc注解详解_springMVC注解开发详解(转)
- sha256加密_有加密传输数据的需求?来试试stunnel
- 食物在人体内消化主要经过哪些步骤
- Exchange 技巧(1) Exchange2010 邮件收发统计
- python从入门到放弃-《Python3从入门到放弃》视频教程
- 201709020工作日记--synchronized、ReentrantLock、读写锁
- 完善的WebGis地图编辑器
- Mocha BSM产品亮点——SNMP Trap的支持
- android音频杂音问题_如何消除音频中的噪声?用这个简单好用的音频剪辑软件就够了...
- vue JsBarcode的使用
- 麒麟下适配mellanox网卡驱动
- H3C-云计算技术专题培训(分享七)
- Python的学习笔记案例8--空气质量指数计算1.0
- openGauss亮相VLDB2020,展示内存优化研究成果
热门文章
- python入门——P42魔法方法:算数运算1
- MySql字符串截取之substring_index
- LeetCode-返回倒数第 k 个节点
- Java static , final和常量设计
- openwrt添加自己的iptables的targe编译报错
- [leetcode]328. Odd Even Linked List
- 在SQL Server中解析和旋转定界数据
- power bi dax_M语言和Power BI中的DAX之间的差异
- 远程mysql用ssh连接_使用SSH密钥连接到远程MySQL服务器
- sql server死锁_SQL Server如何选择死锁受害者