paging problem in one to many query of mybatis
2022-10-27
#java
#mybatis
2022-10-27
#java
#mybatis
前言
mybatis 支持一对多的关系映射,如果需要在这种关系下,使用 pagehelper 的话,需要注意原本的 sql 以及 resultmap 的用法, 否则可能会导致 pagehelper 返回的 total 比预期的数量大。
例子
mapper
pojo
假设现在有一个作者写了两篇文章, 调用
selectAuthorWithBlog
这个方法,会发现返回的实际数量是 1 条,但是如果使用pagehelper
去获取total
,返回的total
是 2 条,这个不难理解,上面的 sql 实际执行结果也是 2 条,pagehelper
的获取total
也是根据对原 sql 的结果进行count
得出的。解决方法
嵌套 select 查询(Nested Select for Collection)
将原本的关联查询,从 mapper 中抽离,使用 嵌套 select 查询
主要修改是在 select="selectBlogByAuthor" column="id"
这个时候 pagehelper 的查询结果就返回正常了。
参考链接
Mybatis中如何实现一对一,一对多的关联查询
关于mybatis映射文件中表一对多时分页异常解决方法