1.引入
我们在上一次课程中说到了插件的相关使用。这一节课,我们就和大家一起说一下数据操作中常用的一个功能,就是数据的分页显示。那么这里数据的分页显示我们使用PageHelpler来实现操作。那么下面我们一起来看一些如何使用PageHelpler和我们的MyBatis结合实现数据的分页操作。
2.PageHelpler简介以及使用(具体内容参见官方文档:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md)
PageHelpler是第三方的一个分页插件,具体使用方法以及步骤如下:
(1).相关的文档信息内容地址为:https://github.com/pagehelper/Mybatis-PageHelper
(2).使用步骤相关中文文档以及步骤简介如下:
相关的中文文档:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
步骤:
①:引入相关的jar包内容:pagehelper-5.0.0-rc.jar、 jsqlparser.jar。
②:配置拦截器插件,在 MyBatis 配置 xml 中配置拦截器插件,内容如下:
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<property name="param1" value="value1"/>
</plugin>
</plugins>
(3).如何在代码中使用(这里面仅仅提供一种)
//第二种,Mapper接口方式的调用,推荐这种使用方式。
PageHelper.startPage(1, 10);
List<User> list = userMapper.selectIf(1);
使用PageInfo的用法:
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
List<User> list = userMapper.selectAll();
//用PageInfo对结果进行包装
PageInfo page = new PageInfo(list);
//测试PageInfo全部属性
//PageInfo包含了非常全面的分页属性
assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());
3.Mabatis使用PageHelpler实现数据的分页(完整过程)
(1).创建项目(Java项目或者是web项目都可以)。
(2).创建数据库、数据库库表、添加数据信息。
create database tb_us;
us tb_us;
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for tb_us
-- ----------------------------
DROP TABLE IF EXISTS `tb_us`;
CREATE TABLE `tb_us` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tb_us
-- ----------------------------
INSERT INTO `tb_us` VALUES ('1', '赵云', '123456');
INSERT INTO `tb_us` VALUES ('2', '关羽', '123');
INSERT INTO `tb_us` VALUES ('3', '张飞', '123');
INSERT INTO `tb_us` VALUES ('4', '刘备', '123');
INSERT INTO `tb_us` VALUES ('5', '诸葛亮', '1234');
INSERT INTO `tb_us` VALUES ('6', '曹操', '1234456');
INSERT INTO `tb_us` VALUES ('7', '司马懿', '123');
INSERT INTO `tb_us` VALUES ('8', '郭嘉', '123456');
(3).创建实体对象
public class User {
//记录编号ID
private int id;
//用户名
private String username;
//密码
private String password;
//省略getXxx()和setXxx()方法
}
(4).创建对于的相关的接口以及常用方法
public interface UserMapper {
public User getUsById(Integer id);
public List<User> getUsr();
public Long addUs(User employee);
public void getPageByProcedure(MySQLPage page);
}
(5).编写全局配置文件内容:mybatis-config.xml
<?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.PageInterceptor"></plugin>
</plugins>
<environments default="dev_mysql">
<environment id="dev_mysql">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
</databaseIdProvider>
<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
<mappers>
<mapper resource="UserMapper.xml" />
</mappers>
</configuration>
(6).实体对象映射文件UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mpt.mybatis.dao.UserMapper">
<!--
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
public User getUsById(Integer id);
-->
<select id="getUsById" resultType="com.mpt.mybatis.bean.User">
select id,username,password from tb_us where id = #{id}
</select>
<!--public List<Employee> getEmps(); -->
<select id="getUsr" resultType="com.mpt.mybatis.bean.User">
select id,username,password from tb_us
</select>
</mapper>
(7).编写对应的测试类代码
public class MyBatisTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test01() throws IOException {
// 1、获取sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
// 2、获取sqlSession对象
SqlSession openSession = sqlSessionFactory.openSession();
try {
UserMapper mapper = openSession.getMapper(UserMapper.class);
Page<Object> page = PageHelper.startPage(5, 5);
List<User> emps = mapper.getUsr();
//传入要连续显示多少页
PageInfo<User> info = new PageInfo<User>(emps, 5);
for (User us : emps) {
System.out.println(us);
}
System.out.println("-------基础分页信息:--------");
System.out.println("当前页码:"+page.getPageNum());
System.out.println("总记录数:"+page.getTotal());
System.out.println("每页显示记录数:"+page.getPageSize());
System.out.println("总页码:"+page.getPages());
System.out.println();
///xxx
System.out.println("---------全面配置信息:--------");
System.out.println("当前页码:"+info.getPageNum());
System.out.println("总记录数:"+info.getTotal());
System.out.println("每页的记录数:"+info.getPageSize());
System.out.println("总页码:"+info.getPages());
System.out.println("是否第一页:"+info.isIsFirstPage());
System.out.println("连续显示的页码:");
int[] nums = info.getNavigatepageNums();
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
} finally {
openSession.close();
}
}
public static void main(String[] args) throws IOException {
MyBatisTest mbt = new MyBatisTest();
//mbt.test();
mbt.test01();
}
}
(8).输出测试显示