想使用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。由于两者的实现方式冲突,所以在同时使用时会出现问题。
解决方案: 要解决这个问题,有两种方法可以尝试:
<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的其他功能。
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的分页插件冲突问题,你可以根据自己的需求选择适合的方法。
【相关推荐】