当前位置: 首页 > 科技观察

如果按照3.6.0使用Mybatis-plus,分页失败以及Pagehelper的完美替代_0

时间:2023-03-15 00:38:27 科技观察

1.前言小编最近经历了后端框架的迁移。虽然不是我做的,但是有个paging的情况是我和一个同事做的。先说下小编的要求:原框架使用Mybatis-plus做分页,待更换的新框架使用Pagehelper。所以现在我们需要摆脱若一,使用Mybatis-plus。Mybatis-plus的生态挺好的,方便,最重要的是和原来的框架一样,不用改。有个问题:我们需要把若意之前的页面全部改成mybatis-plus的页面,然后一个一个改,谁让我们喜欢搬砖!先说一下问题的原因:Mybatis和Mybatis-plus有冲突,Pagehelper依赖Mybatis,所以有冲突!!解决方法:删除Pagehelper和Mybatis的依赖,然后根据一些基础配置一点点改分页,最后添加Mybatis-plus的分页插件配置!最重要的是要扫到写好的分页插件,不然不行!2.删除依赖1.删除根目录依赖org.mybatis.spring.bootmybatis-spring-boot-starter${spring-boot.mybatis}com.github.pagehelperpagehelper-spring-boot-starter${pagehelper.boot.version}2.2.22、添加依赖到根目录com.baomidoumybatis-plus-boot-starter${spring-boot.mybatis-plus}3.5.13、若依-common-coremoduledeletedependencycom.github.pagehelperpagehelper-spring-boot-starter3.修改文件1.注释整个PageUtils类!/***分页工具类**@authorruoyi*/publicclassPageUtilsextendsPageHelper{}2、注解BaseController分页方法/***设置请求分页数据*/protectedvoidstartPage(){PageUtils.startPage();}/***清除分页的线程变量*/protectedvoidclearPage(){PageUtils.clearPage();}/***响应请求分页数据*/@SuppressWarnings({"rawtypes","unchecked"})protectedTableDataInfogetDataTable(Listlist){TableDataInforspData=newTableDataInfo();rspData.setCode(HttpStatus.SUCCESS);rspData.setRows(列表);rspData.setMsg("查询成功");rspData.setTotal(newPageInfo(列表).getTotal());returnrspData;}四、配置Mybatis-plus分页1.在ruoyi-common-core新建一个配置类@ConfigurationpublicclassMybatisPlusConfig{/***新的分页插件,一二遵循mybatis的规则,你需要设置MybatisConfiguration#useDeprecatedExecutor=false来避免缓存问题(这个属性会在旧插件移除后移除)*/@BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptor=newMybatisPlusInterceptor();interceptor.addInnerInterceptor(newPaginationInner.Interceptor)bMYD);返回拦截器;}}2.可以扫描配置。我们发现内核已经给了我们提示。它配置了一个。我们只需要添加刚才写的配置类就可以扫描配置了。然后它起作用了!!不配置是不会生效的(切记切记)!我们找到位置并添加完整路径。这里我们把Zoe的架构改了名字,在Zoe的core包下!5、我们修改ruoyi-modules-system的目的是为了不影响之前的使用。我们需要写一个新的页面,因为他们的导出接口使用的是原来的页面。页面虽然没了,但是只要不调用,是不会报错的!下面以controller的改造为例:1.SysConfigController改造的原方法:/***获取参数配置列表*/@RequiresPermissions("system:config:list")@GetMapping("/list")publicTableDataInfo列表(系统配置配置){startPage();Listlist=configService.s选择配置列表(配置);returngetDataTable(list);}修改方法:这里统一返回值我用的是我们之前的架构,也可以使用若仪自带的AjaxResult,添加Page即可,原来的方法我们不动,重写一个有两个参数的方法/***获取参数配置列表*/@RequiresPermissions("system:config:list")@GetMapping("/list")publicRlist(Pagepage,SysConfigconfig){returnR.ok(configService.selectConfigList(page,config));}2、ISysConfigService新的分页方法/***newpage*@parampage*@paramconfig*@return*/PageselectConfigList(Pagepage,SysConfigconfig);3、SysConfigServiceImpl增加一个分页实现方法@OverridepublicPageselectConfigList(Pagepage,SysConfigconfig){returnconfigMapper.selectConfigList(page,config);}4、SysConfigMapper增加一个分页接口/***Newpage*@parampage*@paramconfig*@return*/PageselectConfigList(Pagepage,@Param("config")SysConfig配置);5.依次总结ruoyi-modules-system项目进行修改,有一些jobs和gens。如果您不需要它,只需将其注释掉即可。只要不报错,就可以显示原来的项目页面。修改前total和pages均为0,修改后恢复正常。总的来说就是删除依赖,添加依赖,注释掉一些不需要的,添加新的分页方式。这都是实体的工作,哈哈!!6.补充这之后我们发现系统项目中的分页有问题,因为没有指定对象。xml文件中的属性。于是修改了一个xml的例子,现分享给大家:dept.deptId!=nullanddept.deptId!=0">ANDdept_id=#{dept.deptId}ANDparent_id=#{dept.parentId}ANDdept_namelikeconcat('%',#{dept.deptName},'%')ANDstatus=#{dept.status}${dept.params.dataScope}orderbyd.parent_id,d.order_num