MyBatis一对多映射失败问题原因与解决方法(一对多查询返回结果只有一条)
文章目录
MyBatis一对多映射失败问题原因与解决方法(一对多查询返回结果只有一条)
@[toc]1、问题描述2、问题原因与解决3、可能其他原因补充
1、问题描述
前言:mybatis高级映射一对多失败原因有多种。 问题描述:我这里出现的问题是:在数据库中进行多表联查查询到多条记录结果是正常的一对多情况,但是mybatis映射时装载失败只保留了一条数据。 1) 数据库查询语句与结果如下:
mysql查询语句如下(一个用户(u.* )对应多条借阅记录(b.* )): select u.*,b.* from `users` as u
left join `borrow` as b
on b.`user_id` = u.`id`
where !isNull(b.book_id)
mysql查询结果如下: 2)mybatis映射文件如下
jdbcType="VARCHAR" /> select u.*,b.* from `users` as u left join `borrow` as b on b.`user_id` = u.`id` where !isNull(b.book_id) 3)代码展示 //vo包下结果映射实体类: BorrowListOut.java ====================================================================================== @Data public class BorrowListOut extends Users { @ApiModelProperty("借阅记录") private List } //test包下:测试代码 ====================================================================================== @SpringBootTest(classes = ManagerApplication.class) public class BorrowTest { @Autowired private BorrowService borrowService; @Test void testFandBorrows() { List for (BorrowListOut borrowListOut : borrows) { System.out.println("用户:"+borrowListOut.getUsername()); System.out.println("借阅条数:" + borrowListOut.getBorrows().size()); for (Borrow borrow: borrowListOut.getBorrows()) { System.out.println(borrow); } System.out.println("-------------------------"); } } } ====================================================================================== 4)在mybatis实际运行日志中确实查到mysql中的三条数据: 但是最后的测试数据却只有一条(即borrowListOut.getBorrows().size()==1): 2、问题原因与解决 问题原因:两张表中的id字段是一样的,这样会导致sql结果集的覆盖:即user表下的id与borrow表下的id 解决办法:1、更改数据库中字段名 2、删去其中一个id标签 3、可能其他原因补充 参考博文:(1条消息) Mybatis 一对多查询返回结果只有一条:解决思路_mybatis 返回一条_星海一粟的博客-CSDN博客问题原因:可能是column 和 property 不匹配(不一致)的问题了。解决办法:修改column 和 property对应正确即可 好文链接
发表评论