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

一、前言

小编最近在经历后端框架的迁移,虽然不是小编来做,但是有个分页的情况让小编和一个同事去搞。说一下小编这边的需求:原来框架使用​Mybatis-plus​进行分页,要更换的新框架若依是使用Pagehelper​。所以现在需求让我们把若依的干掉,使用Mybatis-plus,Mybatis-plus​的生态还是挺好的,方便,最重要的是和原来的框架一样,不需要更改。存在问题:需要把若依以前的分页全部改成​Mybatis-plus的分页,那我们就按个换喽,谁让咱们喜欢搬砖!

先说一下问题出现的原因:Mybatis和Mybatis-plus存在冲突,​Pagehelper依赖于Mybatis,所以冲突了!!

解决方案:删​Pagehelper和Mybatis​的依赖,然后一点点的改若依一些基本配置的分页就好,最后在加上Mybatis-plus的分页插件配置!最最重要的是要扫描到写的分页插件,不然不生效!​

二、删依赖

1、删除根目录的依赖

<!--Mybatis依赖配置-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${spring-boot.mybatis}</version>
</dependency>

<!--pagehelper分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.boot.version}</version>
</dependency>
<spring-boot.mybatis>2.2.2</spring-boot.mybatis>

2、根目录添加依赖

<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${spring-boot.mybatis-plus}</version>
</dependency>
<spring-boot.mybatis-plus>3.5.1</spring-boot.mybatis-plus>

3、ruoyi-common-core模块删除依赖

<!--Pagehelper-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>

三、修改文件

1、注释PageUtils

整个类全部注释!

/**
* 分页工具类
*
* @author ruoyi
*/
publicclassPageUtilsextendsPageHelper{}

2、注释BaseController分页方法

/**
* 设置请求分页数据
*/
protectedvoidstartPage(){
PageUtils.startPage();
}

/**
* 清理分页的线程变量
*/
protectedvoidclearPage(){
PageUtils.clearPage();
}

/**
* 响应请求分页数据
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
protectedTableDataInfogetDataTable(List<?>list){
TableDataInforspData=newTableDataInfo();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setRows(list);
rspData.setMsg("查询成功");
rspData.setTotal(newPageInfo(list).getTotal());
returnrspData;
}

四、配置Mybatis-plus分页

1、在ruoyi-common-core中新建配置类

@Configuration
publicclassMybatisPlusConfig {

/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
@Bean
publicMybatisPlusInterceptormybatisPlusInterceptor() {
MybatisPlusInterceptorinterceptor=newMybatisPlusInterceptor();
interceptor.addInnerInterceptor(newPaginationInnerInterceptor(DbType.MYSQL));
returninterceptor;
}

}

2、配置上可以扫描的

我们发现在core中已经给了我们提示,他配置了一个,我们只需要把我们刚刚写的配置类加上去,就可以扫描到这配置,然后生效了!!

不配置不生效(切记切记)!

我们找到所在位置,添加上全路径即可,这里我们对若依的架构修改了名称,也就是若依的core包下的!

五、修改ruoyi-modules-system

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

1、SysConfigController改造

原来的方法:

/**
* 获取参数配置列表
*/
@RequiresPermissions("system:config:list")
@GetMapping("/list")
publicTableDataInfolist(SysConfigconfig){
startPage();
List<SysConfig>list=configService.selectConfigList(config);
returngetDataTable(list);
}

修改后的方法:

这里统一返回值我是使用我们以前架构的,大家也可以使用若依自带的AjaxResult,只需要添加上Page即可,原来的方法我们不动,重新写一个两个参数的方法。

/**
* 获取参数配置列表
*/
@RequiresPermissions("system:config:list")
@GetMapping("/list")
publicRlist(Pagepage, SysConfigconfig) {
returnR.ok(configService.selectConfigList(page, config));
}

2、ISysConfigService新增分页方法

/**
* 新分页
* @param page
* @param config
* @return
*/
Page<SysConfig>selectConfigList(Pagepage,SysConfigconfig);

3、SysConfigServiceImpl新增分页实现方法

@Override
publicPage<SysConfig>selectConfigList(Pagepage, SysConfigconfig) {
returnconfigMapper.selectConfigList(page,config);
}

4、SysConfigMapper新增分页接口

/**
* 新分页
* @param page
* @param config
* @return
*/
Page<SysConfig>selectConfigList(Pagepage,@Param("config") SysConfigconfig);

5、总结

这样依次对ruoyi-modules-system项目进行修改,还有一些job和gen,不要和不用的就注释掉,只要不报错,原来的项目分页就可以展示出来,原来不改造之前是total和pages都是0,改造后恢复正常。

总的来说就是删依赖,加依赖,注释一些不要的,添加一个新的分页方法即可,都是搬砖的活,哈哈!!

六、补充

这样之后我们发现system项目中的分页是有问题,是因为xml文件里没有指定对象.属性。于是把xml的一个例子修改了,现在分享给大家:

<selectid="selectDeptList"resultMap="SysDeptResult">
<includerefid="selectDeptVo"/>
whered.del_flag='0'
<iftest="dept.deptId != null and dept.deptId != 0">
ANDdept_id=#{dept.deptId}
</if>
<iftest="dept.parentId != null and dept.parentId != 0">
ANDparent_id=#{dept.parentId}
</if>
<iftest="dept.deptName != null and dept.deptName != ''">
ANDdept_namelikeconcat('%', #{dept.deptName}, '%')
</if>
<iftest="dept.status != null and dept.status != ''">
ANDstatus=#{dept.status}
</if>
<!--数据范围过滤-->
${dept.params.dataScope}
orderbyd.parent_id, d.order_num
</select>

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/229734.html<

(0)
管理的头像管理
上一篇2025-04-18 22:02
下一篇 2025-04-18 22:03

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注