Mybatis框架的重要配置之MyBatisPlus拦截器(用于分页)及相关问题

本文讲述了在配置MyBatisPlus时,分页拦截器对统计total值的重要性,以及遇到的错误原因——版本冲突导致的net.sf.jsqlparser.Schema.Column不存在。通过在pom.xml中排除冲突的jsqlparser依赖,解决了启动问题。

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

配置类代码

/**
 * MyBatisPlus配置类
 */
@Configuration
public class MyBatisPlusConfig {

    /**
     * MyBatisPlus拦截器(用于分页)
     */
    @Bean
    public MybatisPlusInterceptor paginationInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //添加MySQL的分页拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

}

如果不配置该分页拦截器,我们在使用mybatis自带的seletePage()方法时,还是能进行查询,但此时会发现,total值为0。只有当配置该分页拦截器后,才能正常统计total的值。

但配置了该拦截器,可能会出现某些问题,如:

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2024-03-28 09:13:28.137 ERROR 18956 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

An attempt was made to call the method net.sf.jsqlparser.schema.Column.withColumnName(Ljava/lang/String;)Lnet/sf/jsqlparser/schema/Column; but it does not exist. Its class, net.sf.jsqlparser.schema.Column, is available from the following locations:

    jar:file:/D:/software/apache-maven-3.6.1/mvn_reps/com/github/jsqlparser/jsqlparser/1.2/jsqlparser-1.2.jar!/net/sf/jsqlparser/schema/Column.class

It was loaded from the following location:

这是由于依赖问题,比如我这里是:

与其他依赖发生版本冲突问题,此时只需在pom文件中加入

<!--由于版本冲突,所以排除pagehelper的jsqlparser-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>${pagehelper.version}</version>
    <exclusions>
        <exclusion>
            <artifactId>jsqlparser</artifactId>
            <groupId>com.github.jsqlparser</groupId>
        </exclusion>
    </exclusions>
</dependency>

即可成功解决问题,正常启动项目。

<think>好的,我需要比较MyBatis分页插件(比如PageHelper)和MyBatis-Plus分页插件的功能差异及使用方法。首先,我需要回忆一下两者的基本工作原理和特点。 根据引用[2],MyBatis的PageHelper通过拦截SQL语句,自动添加分页逻辑,支持多种数据库,使用起来比较简便。而引用[1]提到MyBatis-Plus的分页插件则是通过传入Page对象,自动追加LIMIT子句,简化了分页操作。两者的核心差异可能在配置方式、对多数据库的支持以及是否需要手动编写分页SQL上。 接下来,我需要整理它们的功能差异。比如,MyBatis-Plus可能更深度集成到框架中,自动处理分页逻辑,而PageHelper可能需要更多的配置。另外,MyBatis-Plus的分页可能更依赖于其内置的BaseMapper和分页模型,而PageHelper可能通过ThreadLocal或者参数绑定来实现。 使用方法方面,引用[3]提到MyBatis分页可以通过LIMIT、RowBounds或PageHelper实现,而MyBatis-Plus有自己的分页机制。具体代码示例可能需要展示两者在配置和实际查询中的不同步骤,比如MyBatis-Plus需要配置分页拦截器,而PageHelper可能在方法调用前设置分页参数。 还要注意是否需要返回总记录数的问题。引用[4]中的代码示例显示,MyBatis可能需要手动查询总数,而MyBatis-Plus的分页对象可能自动处理总数统计。 需要确保回答结构清晰,分点说明功能和用法,并引用提供的资料来支持观点。同时,根据用户要求,生成相关问题,比如优化方法、适用场景等。</think>### MyBatis分页插件 vs MyBatis-Plus分页插件:功能差异与使用方法 #### 一、核心功能对比 | **特性** | **MyBatis分页插件(如PageHelper)** | **MyBatis-Plus分页插件** | |-----------------------|--------------------------------------------|-------------------------------------------| | **实现原理** | 通过拦截SQL执行过程,动态拼接分页语句[^2] | 基于MyBatis-Plus拦截器自动追加分页逻辑[^1] | | **多数据库支持** | 支持多种数据库(如MySQL、Oracle等) | 需手动配置方言,默认支持主流数据库 | | **分页模型** | 依赖`PageInfo`或`Page`对象 | 使用内置`Page<T>`对象封装分页数据 | | **总记录数统计** | 自动执行COUNT查询(需配置) | 自动执行COUNT查询,无需额外配置[^3] | | **代码侵入性** | 低(仅需在查询前调用`PageHelper.startPage`) | 需定义分页对象并配置拦截器 | --- #### 二、使用方法对比 ##### **1. MyBatis分页插件(以PageHelper为例)** **步骤1:添加依赖** ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>最新版本</version> </dependency> ``` **步骤2:配置拦截器MyBatis配置文件中)** ```xml <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="dialect" value="mysql"/> </plugin> </plugins> ``` **步骤3:代码中使用** ```java // 设置分页参数(第2页,每页10条) PageHelper.startPage(2, 10); List<User> users = userMapper.selectAll(); // 封装分页信息 PageInfo<User> pageInfo = new PageInfo<>(users); ``` ##### **2. MyBatis-Plus分页插件** **步骤1:添加依赖** ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本</version> </dependency> ``` **步骤2:配置分页拦截器** ```java @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } } ``` **步骤3:代码中使用** ```java // 创建分页对象(第2页,每页10条) Page<User> page = new Page<>(2, 10); // 执行分页查询(自动返回包含总记录数的Page对象) Page<User> result = userMapper.selectPage(page, null); List<User> users = result.getRecords(); long total = result.getTotal(); ``` --- #### 三、关键差异总结 1. **自动化程度** MyBatis-Plus的分页对象`Page<T>`直接绑定分页参数和结果,自动统计总数[^1],而PageHelper需通过`PageInfo`二次封装。 2. **SQL侵入性** MyBatis-Plus无需修改原有Mapper方法,通过泛型`Page<T>`参数实现分页[^4],而PageHelper需在查询前调用`startPage()`。 3. **扩展性** PageHelper支持更灵活的手动分页(如`RowBounds`),而MyBatis-Plus深度集成BaseMapper,适合快速开发。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值