想使用PageHelper进行分页查询 在pom.xml文件中不存在MyBatis-Plus的分页插件PaginationInnerInterceptor 但是已然存在冲突问题

想使用PageHelper进行分页查询 在pom.xml文件中不存在MyBatis-Plus的分页插件PaginationInnerInterceptor 但是依然存在冲突问题是什么原因


```java
类型 异常报告

消息 Servlet执行抛出一个异常

描述 服务器遇到一个意外的情况,阻止它完成请求。

例外情况

javax.servlet.ServletException: Servlet执行抛出一个异常
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
根本原因。

java.lang.NoSuchMethodError: org.apache.ibatis.reflection.MetaObject.forObject(Ljava/lang/Object;Lorg/apache/ibatis/reflection/factory/ObjectFactory;Lorg/apache/ibatis/reflection/wrapper/ObjectWrapperFactory;)Lorg/apache/ibatis/reflection/MetaObject;
    com.github.pagehelper.SqlUtil.forObject(SqlUtil.java:78)
    com.github.pagehelper.SqlUtil.getsqlSource(SqlUtil.java:516)
    com.github.pagehelper.SqlUtil.getMappedStatement(SqlUtil.java:439)
    com.github.pagehelper.SqlUtil.processCountMappedStatement(SqlUtil.java:143)
    com.github.pagehelper.PageHelper.intercept(PageHelper.java:263)
    org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
    com.sun.proxy.$Proxy12.query(Unknown Source)
    org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
    org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)
    org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
    org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147)
    org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80)
    org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:145)
    org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)
    com.sun.proxy.$Proxy13.find(Unknown Source)
    com.bw.servlet.StudentServlet.service(StudentServlet.java:33)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)



【以下回答由 GPT 生成】

问题原因: PageHelper和MyBatis-Plus(以及其他一些类似的插件)都提供了分页功能,但它们的实现方式不同。PageHelper基于拦截器实现分页,而MyBatis-Plus使用的是独立的分页插件PaginationInnerInterceptor。由于两者的实现方式冲突,所以在同时使用时会出现问题。

解决方案: 要解决这个问题,有两种方法可以尝试:

  1. 使用PageHelper提供的支持MyBatis-Plus的自定义分页插件 Step 1: 在pom.xml文件中添加PageHelper依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>最新版本</version> </dependency>

Step 2: 在application.properties/application.yml中配置PageHelper和MyBatis-Plus相关属性: ``` ## 开启PageHelper支持MyBatis-Plus的插件 pagehelper.helper-dialect=mysql pagehelper.reasonable=true

## MyBatis-Plus分页的插件 # 设置为PaginationInnerInterceptor来替代默认的PageInterceptor pagehelper.plugins=com.baomidou.mybatisplus.extension.plugins.PaginationInnerInterceptor ```

Step 3: 在MyBatis的配置文件中添加PageInterceptor的bean: xml <bean id="pageInterceptor" class="com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration$PageInterceptorConfiguration"> <property name="properties"> <util:properties location="classpath:pagehelper.properties" /> </property> </bean>

Step 4: 在具有分页查询的Mapper接口中使用com.github.pagehelper.Page替代com.baomidou.mybatisplus.core.metadata.IPage: java @Select("SELECT * FROM table_name") List<YourEntity> selectByPage(Page<YourEntity> page);

这样配置后,PageHelper就会使用PaginationInnerInterceptor插件来进行分页,同时兼容MyBatis-Plus的其他功能。

  1. 手动实现分页功能,不使用PageHelper插件 如果你不想使用PageHelper插件,你可以手动实现分页功能。在使用MyBatis的Mapper接口编写查询SQL时,使用LIMIT和OFFSET语句来实现分页。具体步骤如下: Step 1: 在Mapper接口中定义查询方法,包含两个参数: java List<YourEntity> selectByPage(@Param("limit") int limit, @Param("offset") int offset);

Step 2: 在对应的Mapper XML文件中编写SQL语句,使用LIMIT和OFFSET来实现分页查询: xml <select id="selectByPage" resultType="YourEntity"> SELECT * FROM table_name LIMIT #{limit} OFFSET #{offset} </select>

Step 3: 在Service或Controller中调用Mapper接口的查询方法,传入合适的limit和offset值,即可实现分页查询。

这两种方法可以解决PageHelper和MyBatis-Plus的分页插件冲突问题,你可以根据自己的需求选择适合的方法。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^