解决mybatis一对多查询resultMap只返回了一条记录问题

网友投稿 402 2022-09-12


解决mybatis一对多查询resultMap只返回了一条记录问题

问题描述:因为领导的一个需求,需要用到使用resultMap,很久没使用了,结果就除了点意外。就记录下这个问题

@Data

public class Author {

private Integer id;

private String name;

private String phone;

private String address;

private List books;

}

@Data

public class Book {

private Integer id;

private String name;

private String press;

private BigDecimal price;

private Integer authorId;

}

开始的Mapper.xml文件

select t1.*,t2.* from

author t1 inner join book t2 on t1.id=t2.author_id

where t1.id=#{id}

使用postman执行查看结果:

{

"code": "200",

"msg": "成功",

"data": {

"id": 1,

"name": "法外狂徒张三",

"phone": null,

"address": null,

"books": [

{

"id": 1,

"name": "法外狂徒张三",

"press": "人民出版社",

"price": 10.00,

"authorId": 1

}

]

}

}

发现问题:本来author对应book有两条记录,结果books里面只返回了一条记录。

问题原因:2张表的主键都叫id,所以导致结果不能正确展示。

解决方法:1、主键使用不用的字段名。2、查询sql时使用别名

1、主键使用不用的字段名,涉及到更改数据库,只需要更改其中一个即可 。这里演示将book的id更改为book_id

select t1.*,t2.* from

author t1 inner join book t2 on t1.id=t2.author_id

where t1.id=#{id}

2、查询sql时使用别名。这里演示将查询book时id 更改别名为 bookId

select t1.*,t2.id as bookId, t2.* from

author t1 inner join book t2 on t1.id=t2.author_id

where t1.id=#{id}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:NETCONF配置CISCO XE(csr1000v)初体验(NETCONF协议)
下一篇:Radius无线动态VLAN配置
相关文章

 发表评论

暂时没有评论,来抢沙发吧~