这几天在搭建框架的时候使用了 Mybatis 的一款分页插件,名叫 MybatisPagehelper。在阅读官网文档中常见问题的时候,有一个问题——为什么不支持一对一和一对多结果映射的分页查询?官方给出的答案是:在一对一和一对多时,根据分页条件查询出 100 条数据时,由于一对一和一对多会去重,经过嵌套处理后数据量会减少,因此分页想要获得 100 条数据无法实现。想要支持这种情况可以使用嵌套查询。嵌套查询是要额外执行SQL,主SQL可以得到正确的结果数量,因此可以正常分页。

Talk is cheap,show me the code.

错误分页方式.jpg

正确分页方式.jpg

使用第二种方式确实是保证了分页的正确性,但是也会导致典型的 N+1 问题,所以如果系统有强性能要求,类似的分页需要自己单独去写。