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" />

3)代码展示 //vo包下结果映射实体类: BorrowListOut.java

======================================================================================

@Data

public class BorrowListOut extends Users {

@ApiModelProperty("借阅记录")

private List borrows;

}

//test包下:测试代码

======================================================================================

@SpringBootTest(classes = ManagerApplication.class)

public class BorrowTest {

@Autowired

private BorrowService borrowService;

@Test

void testFandBorrows() {

List borrows = borrowService.findBorrows();

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对应正确即可

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: