们在进行查询时,很多时候会用到分页的情况,根据前端传过来的数据进行查询,比如需要查询第三页的内容:
通过MyBatis的话,我们可以通过分页插件进行使用,首先我们需要先引入对应的jar包,配置对应的内容,然后就可以进行使用对应分页的功能
使用maven工程中的pom.xml配置文件,进行引入对应的jar包,
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.4</version>
</dependency>
然后再我们的MyBatis中的全局配置文件配置分页的插件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
</configuration>
这样我们就把对应的分页插件配置完成
我们需要注意点是,核心配置文件的标签是有顺序先后的,看下图标签放在第一个位置,就报错了。按照顺序plugins应该放在标签前如果出现报错,可查看报错信息,确认plugins需要放在什么位置上
测试分页代码的实现:
Mapper.java接口编写:
//分页查询
public List<Teacher> selectAllTeacher();
Mapper.xml的SQL实现:
<!-- 分页查询 -->
<select id="selectAllTeacher" resultType="teacher">
select * from teacher
测试类:
@Test
// 接口式编程===分页查询
public void selectAllTeacher() throws IOException {
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
// 初始化mybatis,创建SqlSessionFactory类实例
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
// 创建Session实例
SqlSession session = sqlSessionFactory.openSession();
TeacherMapper mapper = session.getMapper(TeacherMapper.class);// 传入接口类,为他生成一个代理类=new
//设置分页参数
//参数1:当前页
//参数2:每页显示的条数
PageHelper.startPage(2, 3);
List<Teacher> teachers=mapper.selectAllTeacher();
for (Teacher teacher : teachers) {
System.out.println(teacher);
}
}
通过这个方式就可以直接将分页展示出来:
我们如何去使用这个插件呢:
通过
PageHelper.startPage(1, 10);进行查询第一页,每页显示数量为10条
但是我们要记住的是,这个分页拦截器,需要放在我们需要进行SQL分页的语句前面,并且,该拦截器只会对遇到的第一个SQL进行分页,所以要记住这个所放置的位置;
当我们使用分页拦截器时,首先系统会先用count计算得出所要查询的表数据总数,根据pagesize、pagenum计算,通过limit进行分页操作
所以一般系统自己会先执行一条SQL语句
如果我们想获取分页的详细信息的话,我们首先可以先使用
PageInfo<Student> pageInfo = new PageInfo< Student >(list);
Info可调用到的方法相对会比较多
可以查询到更多的内容
public PageInfo<Teacher> selectAllPageQuery(String name, int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<Teacher> list =selectAll(name);
PageInfo<Teacher> result = new PageInfo<Teacher>(list);
return result;
}