若依3.6.0使用Mybatis-plus分页失效以及完美替换Pagehelper

海哥  金牌会员 | 2022-9-16 17:22:55 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 810|帖子 810|积分 2430

一、前言

小编最近在经历后端框架的迁移,虽然不是小编来做,但是有个分页的情况让小编和一个同事去搞。
说一下小编这边的需求:
原来框架使用Mybatis-plus进行分页,要更换的新框架若依是使用Pagehelper。所以现在需求让我们把若依的干掉,使用Mybatis-plus,Mybatis-plus的生态还是挺好的,方便,最重要的是和原来的框架一样,不需要更改。
存在问题:需要把若依以前的分页全部改成Mybatis-plus的分页,那我们就按个换喽,谁让咱们喜欢搬砖!
先说一下问题出现的原因:
Mybatis和Mybatis-plus存在冲突,Pagehelper依赖于Mybatis,所以冲突了!!
解决方案:
删Pagehelper和Mybatis的依赖,然后一点点的改若依一些基本配置的分页就好,最后在加上Mybatis-plus的分页插件配置!最最重要的是要扫描到写的分页插件,不然不生效!
二、删依赖

1. 删除根目录的依赖
  1. <dependency>
  2.     <groupId>org.mybatis.spring.boot</groupId>
  3.     <artifactId>mybatis-spring-boot-starter</artifactId>
  4.     <version>${spring-boot.mybatis}</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>com.github.pagehelper</groupId>
  8.     <artifactId>pagehelper-spring-boot-starter</artifactId>
  9.     <version>${pagehelper.boot.version}</version>
  10. </dependency>
复制代码
  1. <spring-boot.mybatis>2.2.2</spring-boot.mybatis>
复制代码
2. 根目录添加依赖
  1. <dependency>
  2.     <groupId>com.baomidou</groupId>
  3.     <artifactId>mybatis-plus-boot-starter</artifactId>
  4.     <version>${spring-boot.mybatis-plus}</version>
  5. </dependency>
复制代码
  1. <spring-boot.mybatis-plus>3.5.1</spring-boot.mybatis-plus>
复制代码
3. ruoyi-common-core模块删除依赖
  1. <dependency>
  2.     <groupId>com.github.pagehelper</groupId>
  3.     <artifactId>pagehelper-spring-boot-starter</artifactId>
  4. </dependency>
复制代码
三、修改文件

1. 注释PageUtils

整个类全部注释!
  1. /**
  2. * 分页工具类
  3. *
  4. * @author ruoyi
  5. */
  6. public class PageUtils extends PageHelper{}
复制代码
2. 注释BaseController分页方法
  1. /**
  2. * 设置请求分页数据
  3. */
  4. protected void startPage()
  5. {
  6.     PageUtils.startPage();
  7. }
  8. /**
  9. * 清理分页的线程变量
  10. */
  11. protected void clearPage()
  12. {
  13.     PageUtils.clearPage();
  14. }
  15. /**
  16. * 响应请求分页数据
  17. */
  18. @SuppressWarnings({ "rawtypes", "unchecked" })
  19. protected TableDataInfo getDataTable(List<?> list)
  20. {
  21.     TableDataInfo rspData = new TableDataInfo();
  22.     rspData.setCode(HttpStatus.SUCCESS);
  23.     rspData.setRows(list);
  24.     rspData.setMsg("查询成功");
  25.     rspData.setTotal(new PageInfo(list).getTotal());
  26.     return rspData;
  27. }
复制代码
四、配置Mybatis-plus分页

1. 在ruoyi-common-core中新建配置类
  1. @Configuration
  2. public class MybatisPlusConfig {
  3.     /**
  4.      * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
  5.      */
  6.     @Bean
  7.     public MybatisPlusInterceptor mybatisPlusInterceptor() {
  8.         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  9.         interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  10.         return interceptor;
  11.     }
  12. }
复制代码

2. 配置上可以扫描的

我们发现在core中已经给了我们提示,他配置了一个,我们只需要把我们刚刚写的配置类加上去,就可以扫描到这配置,然后生效了!!
不配置不生效(切记切记)
我们找到所在位置,添加上全路径即可,这里我们对若依的架构修改了名称,也就是若依的core包下的!

五、修改ruoyi-modules-system

我们的宗旨是不影响之前的使用,需要我们新写一个分页,因为他们的export接口都使用了原来的分页,虽然分页没了,但是只要不调用还是不会报错的!
我们以一个controller的改造为例:
1. SysConfigController改造

原来的方法:
  1. /**
  2. * 获取参数配置列表
  3. */
  4. @RequiresPermissions("system:config:list")
  5. @GetMapping("/list")
  6. public TableDataInfo list(SysConfig config)
  7. {
  8.     startPage();
  9.     List<SysConfig> list = configService.selectConfigList(config);
  10.     return getDataTable(list);
  11. }
复制代码
修改后的方法:
这里统一返回值我是使用我们以前架构的,大家也可以使用若依自带的AjaxResult,只需要添加上Page即可,原来的方法我们不动,重新写一个两个参数的方法。
  1. /**
  2. * 获取参数配置列表
  3. */
  4. @RequiresPermissions("system:config:list")
  5. @GetMapping("/list")
  6. public R list(Page page, SysConfig config) {
  7.     return R.ok(configService.selectConfigList(page, config));
  8. }
复制代码
2. ISysConfigService新增分页方法
  1. /**
  2. * 新分页
  3. * @param page
  4. * @param config
  5. * @return
  6. */
  7. Page<SysConfig> selectConfigList(Page page,SysConfig config);
复制代码
3. SysConfigServiceImpl新增分页实现方法
  1. @Override
  2. public Page<SysConfig> selectConfigList(Page page, SysConfig config) {
  3.     return configMapper.selectConfigList(page,config);
  4. }
复制代码
4. SysConfigMapper新增分页接口
  1. /**
  2. * 新分页
  3. * @param page
  4. * @param config
  5. * @return
  6. */
  7. Page<SysConfig> selectConfigList(Page page,@Param("config") SysConfig config);
复制代码
5. 总结

这样依次对ruoyi-modules-system项目进行修改,还有一些job和gen,不要和不用的就注释掉,只要不报错,原来的项目分页就可以展示出来,原来不改造之前是total和pages都是0,改造后恢复正常。
总的来说就是删依赖,加依赖,注释一些不要的,添加一个新的分页方法即可,都是搬砖的活,哈哈!!
如果解决了你的问题,还不赶紧一键三连来支持一波小编!!谢谢大家喽~~
六、补充

这样之后我们发现system项目中的分页是有问题,是因为xml文件里没有指定对象.属性。于是把xml的一个例子修改了,现在分享给大家:
  1. <select id="selectDeptList" resultMap="SysDeptResult">
  2.     <include refid="selectDeptVo"/>
  3.     where d.del_flag = '0'
  4.     <if test="dept.deptId != null and dept.deptId != 0">
  5.         AND dept_id = #{dept.deptId}
  6.     </if>
  7.     <if test="dept.parentId != null and dept.parentId != 0">
  8.         AND parent_id = #{dept.parentId}
  9.     </if>
  10.     <if test="dept.deptName != null and dept.deptName != ''">
  11.         AND dept_name like concat('%', #{dept.deptName}, '%')
  12.     </if>
  13.     <if test="dept.status != null and dept.status != ''">
  14.         AND status = #{dept.status}
  15.     </if>
  16.    
  17.     ${dept.params.dataScope}
  18.     order by d.parent_id, d.order_num
  19. </select>
复制代码
有缘人才可以看得到的哦!!!点击访问!小编自己的网站,里面也是有很多好的文章哦!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

海哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表