mybatis plus 多表查询+分页

问题:
由于我们采用的是mybatis plus,它在Wrapper里内置的方法支持多表联合查询,但是多表+分页是不行的(虽然最新版本好像说可以了,但是并不好用)。于是我开始上网查,以前使用这个框架开发的人是如何解决这个问题的。MyBatis分页提供的是逻辑分页,每次将所有数据查询出来,存储到内存中,然后根据请求的页码,进行逐页返回。如果表的数据量很大,无疑是一种灾难。


我看到了一种,使用vo对象来接收查询对象,再进行分页的方法,但是过程很繁琐,当时的我也还对各个层次不是非常熟悉,因此我没有采用.接着我看到了原来,它还支持原生的mybatis,这就意味着我可以自己编写查询的sql进行分页查询。这里有两种方式:

方法一,先介绍通过xml方式实现自定义sql。先在mapper 文件夹中新建UserMapper.xml。注意,在xml文件中,namespace对应的是user模块的dao,id对应dao下面UserMapper接口的函数名,resultType定义返回的类型。文件结构及代码如

方法二,直接在dao层下的Mapper接口中定义方法。如果是要查询所有用户数据,添加@Select注解,并在注解中写sql语句。这样就可以自定义任意的sql语句进行数据操作。

这里我选择了第二种方式,如图
image

这时,我已经完成了第一步。

接着我开始分页查询
1、在项目工程下,创建config目录,在config目录下,创建MybatisPlusConfig配置类。添加分页插件
image
如果没有添加分页插件,selectPage方法也可以代用。但是会把数据数据全部返回。getPage和getTotal获取到总页数和总记录数的值都是0。
2、尝试将自定义sql语句的方法返回值改成page
image
3、测试带参数的分页查询
那时候,遇到的问题有,直接将page作为一个返回值返回,这样查询到了,但是并不分页。
image
最终,借鉴自带的分页法,发现,需要将page作为一个参数一并传入才行。于是分页成功。

总结:其实当时遇到的困难比现在形容起来细节上要多的多,但是没法复原整个经过,总的来说,只要花费相应的时间,即使网上类似的教程很少,也可以照猫画虎,一步步探索出自己想要的效果。

posted @ 2021-06-28 18:18  邹洋艺  阅读(4043)  评论(1编辑  收藏  举报