一、内存分页,使用RowBounds类,但这种方式不推荐,基本不用,所以此方式集成省略。
二、自定义实现,代码量比较少,简单,比较灵活。以下为具体的集成步骤:
1、在User.xml中加入select节点,并组装分页SQL
<select id="getUserArticlesByLimit" parameterType="int" resultMap="resultUserArticleList">
select user.id,user.userName,user.userAddress,article.id as aid,article.title,article.content from user,article where user.id=article.userid and user.id=#{arg0} limit #{arg1},#{arg2}
</select>
注意:上面的写法中select节点的parameterType属性为int类型,而此时是由于当前业务的SQL语句就是全部都是int型的,当对于多类型时,这种属性就不能这么设置了。具体的在多参数中会进行讲解。
2、在IUserOperation.java中加入Mapping对应的方法
public List<Article> getUserArticlesByLimit(int id,int start,int limit);
3、修改UserController.java中获取数据的方法,改成分页方法,并传入指定参数
package com.jsoft.testmybatis.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.jsoft.testmybatis.inter.IUserOperation;
import com.jsoft.testmybatis.models.Article;
@Controller
@RequestMapping("/article")
public class UserController {
@Autowired
IUserOperation userMapper;
@RequestMapping("/list")
public ModelAndView listall(HttpServletRequest request,HttpServletResponse response){
List<Article> articles=userMapper.getUserArticlesByLimit(1,0,2);
ModelAndView mav=new ModelAndView("/article/list");
mav.addObject("articles",articles);
return mav;
}
}
意思是获取用户1的数据,从第0行开始的2条数据。
三,通过分页插件实现
在pom中添加分页插件
<!-- 分页工具,可以达到切换数据库平台的目的 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.4</version>
</dependency>
然后在MyBatis-configuration.xml中添加配置
<configuration>
<!-- 配置分页插件 -->
<plugins>
<!-- <plugin interceptor="com.github.pagehelper.PageHelper"> -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库 -->
<!-- <property name="dialect" value="mysql" /> -->
</plugin>
</plugins>
</configuration>
也是自己之前在网上找的,这是最后修改的,亲测可用。
之前看网上的都是这样的,没有被我修改过的
<configuration>
<!-- 配置分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库 -->
<property name="dialect" value="mysql" />
</plugin>
</plugins>
</configuration>
在这个过程中也遇到了让人很头疼的问题,查看异常信息最终在网上找到了答案
Cause: java.lang.ClassCastException: com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor
因为pageHelper根本就没有实现Interceptor接口,PageInterceptor才实现了Interceptor这个接口。需要将pageHelper替换为PageInterceptor。其实关于这个问题的解决我也是参考别人的,这个博主比我介绍的更为详细,使用MyBatis分页插件PageHelper遇到的问题 - 钟欣 - 博客园
其中跟我遇到的问题都是一模一样。
配置好了之后就可以进行使用了。
使用起来真的很简单,只要在查询之前使用PageHelper.startPage(startPage,pageSize);定义好查询的起始记录数和每页行数就好了。
使用分页插件真的太方便了,只要配置好了,对于每个 实体类在进行分页查询时就是通用的了,不用再一个一个的编写分页查询的sql语句了。