‘com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor‘ 已经过时了导致出现返回total总为0的问题

文章讲述了在配置类MybatisPlusConfig中移除了已过时的依赖,并引入了一个更现代的Bean对象——PaginationInterceptor,该拦截器是针对mysql的分页插件,用于增强查询性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在配置类中去掉原有的依赖,他已经过时了
在这里插入图片描述
去掉之后
添加这个功能更多更新的Bean对象

@Configuration
public class MybatisPlusConfig {
    /**
     *   mybatis-plus分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor page = new PaginationInterceptor();
        page.setDialectType("mysql");
        return page;
    }
 
}
你给的 package com.app.service.impl; import java.util.List; import java.util.Map; import com.app.service.UsersService; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.app.dao.UsersDao; import com.app.entity.UsersEntity; import com.app.utils.PageUtils; import com.app.utils.Query; /** 系统用户服务实现类 使用 MyBatis-Plus 3.5.3 + Spring Boot 3.5.3 + Java 17 @author */ @Service(“userService”) public class UsersServiceImpl extends ServiceImpl<UsersDao, UsersEntity> implements UsersService { /** 分页查询用户数据(基础版) @param params 查询参数 @return 分页工具对象 */ @Override public PageUtils queryPage(Map<String, Object> params) { // 创建分页对象(使用新版本Page类) Page page = new Query(params).getPage(); // 使用QueryWrapper替代过时的EntityWrapper QueryWrapper queryWrapper = new QueryWrapper<>(); // 执行分页查询 Page resultPage = baseMapper.selectPage(page, queryWrapper); return new PageUtils(resultPage); } /** 自定义条件查询用户列表 @param wrapper 查询条件包装器 @return 用户实体列表 */ @Override public List selectListView(Wrapper wrapper) { return baseMapper.selectListView(wrapper); } /** 分页查询用户数据(增强版) @param params 查询参数 @param wrapper 自定义查询条件 @return 分页工具对象 */ @Override public PageUtils queryPage(Map<String, Object> params, Wrapper wrapper) { // 创建分页对象(新版本构造方式) Page page = new Query(params).getPage(); // 执行分页查询(使用条件构造器) Page resultPage = baseMapper.selectListView(page, wrapper); return new PageUtils(resultPage); } } 出现了类“UsersServiceImpl”必须声明为抽象,或为实现“UsersService”中的抽象方法“selectList(Wrapper)”方法未从其超类重写方法不兼容的类型。实际为 Page',需要 'com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.app.entity.UsersEntity>'无法解析构造函数 ‘PageUtils(Page)‘方法未从其超类重写方法’com.app.service.impl.UsersServiceImpl’ 中的 ‘queryPage(Map<String, Object>, Wrapper)’ 与 ‘com.app.service.UsersService’ 中的 ‘queryPage(Map<String, Object>, Wrapper)’ 冲突;返回类型不兼容不兼容的类型。实际为 Page’,需要 'com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.app.entity.UsersEntity>‘不兼容的类型。实际为 java.util.List<com.app.entity.UsersEntity>’,需要 'com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.app.entity.UsersEntity>'无法解析构造函数 ‘PageUtils(Page)’ UsersService的代码如下package com.app.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.app.entity.UsersEntity; import com.baomidou.mybatisplus.core.metadata.IPage; import java.util.List; import java.util.Map; /** * 系统用户服务接口 */ public interface UsersService extends IService<UsersEntity> { /** * 分页查询用户 * @param params 查询参数 * @param wrapper 查询条件 * @return 分页结果 */ IPage<UsersEntity> queryPage(Map<String, Object> params, Wrapper<UsersEntity> wrapper); /** * 查询用户列表 * @param wrapper 查询条件 * @return 用户列表 */ List<UsersEntity> selectList(Wrapper<UsersEntity> wrapper); }
07-12
我的Query为 package com.app.utils; import com.baomidou.mybatisplus.plugins.Page; import org.apache.commons.lang3.StringUtils; import java.util.LinkedHashMap; import java.util.Map; /** * 查询参数 */ public class Query<T> extends LinkedHashMap<String, Object> { private static final long serialVersionUID = 1L; /** * mybatis-plus分页参数 */ private Page<T> page; /** * 当前页码 */ private int currPage = 1; /** * 每页条数 */ private int limit = 10; public Query(JQPageInfo pageInfo) { //分页参数 if(pageInfo.getPage()!= null){ currPage = pageInfo.getPage(); } if(pageInfo.getLimit()!= null){ limit = pageInfo.getLimit(); } //防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险) String sidx = SQLFilter.sqlInject(pageInfo.getSidx()); String order = SQLFilter.sqlInject(pageInfo.getOrder()); //mybatis-plus分页 this.page = new Page<>(currPage, limit); //排序 if(StringUtils.isNotBlank(sidx) && StringUtils.isNotBlank(order)){ this.page.setOrderByField(sidx); this.page.setAsc("ASC".equalsIgnoreCase(order)); } } public Query(Map<String, Object> params){ this.putAll(params); //分页参数 if(params.get("page") != null){ currPage = Integer.parseInt((String)params.get("page")); } if(params.get("limit") != null){ limit = Integer.parseInt((String)params.get("limit")); } this.put("offset", (currPage - 1) * limit); this.put("page", currPage); this.put("limit", limit); //防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险) String sidx = SQLFilter.sqlInject((String)params.get("sidx")); String order = SQLFilter.sqlInject((String)params.get("order")); this.put("sidx", sidx); this.put("order", order); //mybatis-plus分页 this.page = new Page<>(currPage, limit); //排序 if(StringUtils.isNotBlank(sidx) && StringUtils.isNotBlank(order)){ this.page.setOrderByField(sidx); this.page.setAsc("ASC".equalsIgnoreCase(order)); } } public Page<T> getPage() { return page; } public int getCurrPage() { return currPage; } public int getLimit() { return limit; } }
最新发布
07-12
<think>首先,用户的问题是:“我想解决Java中关于mybatis-plus的ClassNotFoundException异常请问java.lang.ClassNotFoundExceptioncom.baomidou.mybatisplus.core.mapper.SqlRunnermybatis-plus配置或依赖缺失”。这表明他们遇到了一个类找不到的异常,具体类是`com.baomidou.mybatisplus.core.mapper.SqlRunner`。回顾系统级指令:-所有行内数学表达式使用`$...$`格式。-独立公式使用`$$...$$`。-LaTeX语法正确。-使用中文回答。-生成相关问题。-在引用的段落末尾添加引用标识。-回答结构清晰,帮助用户逐步解决问题,保证真实可靠。用户提供了几个引用,我需要参考这些引用:-引用[1]:关于`com.mysql.jdbc.Driver`的类找不到问题。-引用[2]:关于`IdentifierGenerator`的类找不到,显示了MyBatis-Plus的依赖。-引用[3]:关于`org.apache.velocity.context.Context`的类找不到,添加了代码生成器依赖。-引用[4]:关于`SqlParser`的类找不到,讨论了依赖冲突和版本统一。用户的当前问题涉及`com.baomidou.mybatisplus.core.mapper.SqlRunner`,这类似于引用[2]和[4]中的问题,都是类找不到异常。关键点:-`ClassNotFoundException`通常意味着缺少相关的依赖库或类路径问题。-`SqlRunner`是MyBatis-Plus核心库的一部分,所以用户可能缺少核心依赖或版本不一致。从引用[2]中,用户有MyBatis-Plus的依赖:```xml<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.0</version></dependency>```但`SqlRunner`在`mybatis-plus-core`中。引用[4]提到依赖冲突和版本统一。`SqlRunner`类在MyBatis-Plus的文档中:它位于`com.baomidou.mybatisplus.core.mapper.SqlRunner`包中,属于核心模块。常见原因:1.缺少`mybatis-plus-core`依赖。2.版本不兼容:使用的版本中没有这个类。3.依赖冲突:其他库覆盖了所需的类。解决方案步骤:1.**检查依赖**:确保添加了正确的MyBatis-Plus依赖。-对于`SqlRunner`,需要`mybatis-plus-core`或`mybatis-plus-boot-starter`(后者包含前者)。-引用[2]中,用户有`mybatis-plus-boot-starter`,但版本是3.3.0。检查这个版本是否包含`SqlRunner`。-在MyBatis-Plus3.3.0中,`SqlRunner`应该存在,因为它在核心中。2.**统一版本**:引用[4]强调统一所有MyBatis-Plus依赖的版本。-用户可能有多个依赖,版本不一致。-例如,`mybatis-plus-boot-starter`和`mybatis-plus-core`应该相同版本。3.**排除冲突**:如果有其他依赖导致冲突,需要排除。4.**清理和重建**:有时需要清理Maven仓库或重新构建项目。在引用[4]中,提到对于代码生成器依赖,如果在test范围,可以注释掉或统一版本。用户的问题中没有指定他们的依赖,所以我需要基于常见场景建议。回答结构:1.**解释问题**:简要说明`ClassNotFoundException`的原因。2.**提供解决方案**:逐步指导如何解决。-检查依赖。-统一版本。-排除冲突。-清理项目。3.**给出示例**:基于引用,提供依赖配置示例。4.**添加引用标识**:在引用参考的末尾添加[^n]。5.**生成相关问题**:在最后添加相关问题。使用中文回答。生成相关问题:-例如:如何管理Maven依赖?如何解决依赖冲突?MyBatis-Plus常见问题。确保LaTeX正确:用户问题中没有数学内容,所以可能不需要。但如果涉及,就使用。现在,构建回答。</think>### 解决MyBatis-Plus的`ClassNotFoundException: com.baomidou.mybatisplus.core.mapper.SqlRunner`异常 `java.lang.ClassNotFoundException`表示Java虚拟机无法找到指定的类,通常是由于依赖缺失、版本冲突或配置错误导致的。针对您遇到的`com.baomidou.mybatisplus.core.mapper.SqlRunner`类缺失问题,`SqlRunner`是MyBatis-Plus核心库中的工具类,用于执行原生SQL操作。以下是逐步解决方案,基于常见原因和最佳实践(参考引用内容): #### 步骤1: 检查并添加缺失依赖 `SqlRunner`类位于`mybatis-plus-core`模块中。如果项目中未包含该依赖,或版本不兼容,会引发此异常。 - **确保添加核心依赖**:在您的`pom.xml`中添加或更新MyBatis-Plus核心依赖。推荐使用`mybatis-plus-boot-starter`(适用于Spring Boot),它自动包含`mybatis-plus-core`。 ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.6</version> <!-- 使用最新稳定版,如3.5.6 --> </dependency> ``` 如果您未使用Spring Boot,直接添加`mybatis-plus-core`: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-core</artifactId> <version>3.5.6</version> </dependency> ``` - **注意**:引用[2]中用户使用了`mybatis-plus-boot-starter:3.3.0`,但`SqlRunner`在早期版本中可能未完全支持。升级到3.4+版本可避免此问题[^2]。 #### 步骤2: 统一依赖版本 依赖冲突是常见原因(如不同子模块版本不一致)。参考引用[4],确保所有MyBatis-Plus相关依赖版本一致: - **检查并统一版本**:在`pom.xml`中,将所有`com.baomidou`依赖的`<version>`设为相同值(如3.5.6)。例如: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.6</version> <!-- 代码生成器依赖,版本需一致 --> </dependency> ``` - 引用[4]中提到,版本冲突(如`mybatis-plus-core`与`mybatis-plus-boot-starter`版本不同)会导致`NoClassDefFoundError`,类似问题可通过统一版本解决[^4]。 #### 步骤3: 排除冲突依赖 如果项目中存在其他库覆盖MyBatis-Plus类路径,需手动排除: - **使用Maven排除冲突**:运行`mvn dependency:tree`检查依赖树。如果发现冲突(如多个不同版本的`mybatis-plus-core`),在依赖中排除: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.6</version> <exclusions> <exclusion> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-core</artifactId> <!-- 排除旧版本 --> </exclusion> </exclusions> </dependency> ``` - 引用[4]建议,如果问题由代码生成器依赖(如`mybatis-plus-generator-ui`)引起,可临时注释掉测试范围的依赖[^4]。 #### 步骤4: 清理和重建项目 类路径缓存可能导致问题: - **清理项目**: - Maven项目:运行`mvn clean install -U`(`-U`强制更新依赖)。 - IDE(如IntelliJ/Eclipse):执行`Build > Rebuild Project`。 - **检查类路径**:确保`SqlRunner.class`存在于生成的`target/classes`或依赖库中。 #### 步骤5: 验证配置 确保配置文件中启用了MyBatis-Plus功能: - 在`application.yml`中添加: ```yaml mybatis-plus: mapper-locations: classpath*:mapper/**/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 可选,用于日志调试 ``` - 如果使用`SqlRunner`,代码中需正确导入: ```java import com.baomidou.mybatisplus.core.mapper.SqlRunner; ``` #### 常见错误场景 - **版本过低**:MyBatis-Plus 3.3.0以下版本可能不包含`SqlRunner`,升级到3.4+。 - **代码生成器干扰**:如引用[3]所示,添加`mybatis-plus-generator`可能引入额外依赖(如Velocity),建议仅在测试范围使用[^3]。 - **数据库驱动问题**:引用[1]中`ClassNotFoundException`由MySQL驱动缺失引起,确保同时添加JDBC驱动[^1]。 如果以上步骤无效,提供您的`pom.xml`和异常堆栈,可进一步分析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值