mybatis联查 字段重复问题 查询出来一致

在这里插入图片描述
联查的数据是不同,但是返回出来的数据是相同的
排查原因:
两个不同的实体类都有同一个字段code
在这里插入图片描述
在这里插入图片描述
解决办法:
在数据库字段column字段起个别名就可以
在这里插入图片描述

MyBatis支持通过结果集映射来解决复杂SQL查询结果的映射问题。如果查询结果集是多表联合查询的情况,需要进行结果集映射,可以使用MyBatis提供的嵌套查询或者嵌套结果映射。 下面以两个表的联合查询为例,介绍MyBatis如何进行结果集映射: 首先,我们假设有两个表:user和order。 user表的结构如下: ``` CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` order表的结构如下: ``` CREATE TABLE `order` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `order_no` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 其中,order表的user_id字段与user表的id字段相关联。 接下来,我们需要进行两个表的联合查询,并将查询结果映射到一个Java对象中。Java对象的结构如下: ``` public class UserOrder { private int id; private String name; private int age; private List<Order> orders; // getter、setter方法 } ``` UserOrder对象包含了user表和order表的字段信息,并且使用List类型的orders属性来保存order表的相关信息。 在MyBatis的Mapper文件中,我们可以使用嵌套查询来实现两个表的联合查询,并将查询结果映射到UserOrder对象中,具体实现如下: ``` <select id="getUserOrder" resultMap="userOrderMap"> SELECT u.id, u.name, u.age, o.id as order_id, o.order_no FROM user u LEFT JOIN order o ON u.id = o.user_id WHERE u.id = #{id} </select> <resultMap id="userOrderMap" type="UserOrder"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="age" property="age"/> <collection property="orders" ofType="Order"> <id column="order_id" property="id"/> <result column="order_no" property="orderNo"/> </collection> </resultMap> ``` 在getUserOrder查询语句中,我们使用了LEFT JOIN关键字来进行两个表的联合查询,并使用了WHERE子句来指定查询条件。在resultMap中,我们使用了collection标签来映射orders属性,并使用了ofType属性来指定orders集合元素的类型为Order对象。 需要注意的是,在resultMap中使用collection标签来映射orders属性时,需要使用id标签来映射order表的主键,使用result标签来映射order表的其他字段信息。 最后,我们通过调用session.selectOne方法来执行getUserOrder查询语句,并将查询结果映射到UserOrder对象中: ``` UserOrder userOrder = session.selectOne("getUserOrder", 1); ``` 以上就是在MyBatis中进行复杂结果集映射的方法。通过使用嵌套查询或嵌套结果映射,可以轻松地实现多表联合查询,并将查询结果映射到Java对象中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值