使用 mybatis-plus 的mybaits的一对多时, total和record的不匹配问题

应该是框架的问题,去官方仓库提了个issues,等回复

https://github.com/baomidou/mybatis-plus/issues/5923

回复来了:

使用 mybatis-plus 的mybaits的一对多时, total和record的不匹配问题_第1张图片

背景

使用 mybatis-plus 的mybaits的一对多时, total和record的不匹配问题_第2张图片

发现 record是两条,但是total显示3

使用resultMap一对多时,三条数据会变成两条,但是total确是3条

下面是一对多的resultMap代码

使用 mybatis-plus 的mybaits的一对多时, total和record的不匹配问题_第3张图片

想要达成的效果

有意思的是,把sql拿出来,执行的确是三条,只是在mapper中进行了一对多的关联,关联后变成两条

但是这里的total有问题,需要优化

原理分析

mybatis-plus在执行sql前,会执行查询total的sql

使用 mybatis-plus 的mybaits的一对多时, total和record的不匹配问题_第4张图片

这里的查询是根据原sql拼接而来,也就是未进行一对多操作的sql

怀疑是框架本身的bug,在框架项目的issues中查找了一番,并没有找到相关答案

框架地址:https://github.com/baomidou/mybatis-plus

于是选择更换一对多的方式,改为子查询

改动前:


    
    

改动后:


    
    
    

使用 mybatis-plus 的mybaits的一对多时, total和record的不匹配问题_第5张图片

子查询sql:

完美解决!又捡起来一种遗忘的mybatis一对多的方式

引申思考

如何传入前端入参到子查询中?

可以在父查询中新增一个查询字段,比如:select #{param.address} as address

然后在column中传入


    
    
    

未测试,应该可用

参考链接

Mybatis一对多,分页问题及映射问题_一对多映射 分页-CSDN博客

你可能感兴趣的:(在学习java的道路上越走越远,mybatis)