MyBatis_Mybatis之PageHelpler实现数据分页

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).输出测试显示

猜你喜欢

转载自blog.csdn.net/u013185175/article/details/113775114
今日推荐