Mybatis 使用分页插件pageHelper、JSqlParser

由于编写分页查询业务繁琐,自己编写分页查询语句不仅使得页面代码冗余,而且开发效率低下,因此mybatis中可以借助分页插件进行分页查询的编程,提高编程效率。

下载插件:pageHelper.x.x.x.jar 和 JSqlParser.x.x.x.jar包

http://www.github.com/pageHelper

http://www.github.com/JSqlParser

首先自写分页查询:

  <!-- 分页查询 -->
  <resultMap type="com.dw.domain.Student" id="result1"></resultMap>
  <select id="selectPageById" parameterType="java.util.Map" resultMap="result1">
     select s.s_id as id,s.s_name as name,s.s_NO as NO from t_student as s limit #{pageNum},#{pageSize};
  </select>
	/**自定义分页查询*/
   @Test
   public void test1() {
	   try {
		InputStream in = Resources.getResourceAsStream("config.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
		SqlSession session = sessionFactory.openSession();	
		StudentDao studentDao = session.getMapper(StudentDao.class);
		
		Map map = new HashMap<>();
		map.put("pageNum", (2-1)*3);
		map.put("pageSize", 3);
		List<Student> list = studentDao.selectPageById(map);
		for (Student student : list) {
			System.out.println(student);
		}
	} catch (IOException e) {
		e.printStackTrace();
	} 
   }


使用分页插件:全局文件config.xml配置
     <plugins>
       <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
     </plugins>   
一、使用pageHelper:

  <!-- 使用分页插件查询 -->
  <select id="selectPage2" resultMap="result1">
     select s.s_id as id,s.s_name as name,s.s_NO as NO from t_student as s
  </select>
   /**测试pagehelper插件*/
   /**使用page*/
   @Test
   public void test2() {
	   try {
		InputStream in = Resources.getResourceAsStream("config.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
		SqlSession session = sessionFactory.openSession();	
		StudentDao studentDao = session.getMapper(StudentDao.class);
		
		/**查询紧跟page之后*/
		Page<Object> page = PageHelper.startPage(1, 2);
		List<Student> list = studentDao.selectPage2();
		for (Student student : list) {
			System.out.println(student);
		}
		System.out.println("查询总页数:"+page.getPages());
		System.out.println("当前页数:"+page.getPageNum());
		System.out.println("每页大小:"+page.getPageSize());
		System.out.println("开始查询的row:"+page.getStartRow());
		System.out.println("总记录数:"+page.getTotal());
	} catch (IOException e) {
		e.printStackTrace();
	} 
	   
	   /*
	    查询结果:
Student [id=1, name=zhangsan, NO=654321, school=null]
Student [id=2, name=王五, NO=108030009, school=null]
查询总页数:3
当前页数:1
每页大小:2
开始查询的row:0
总记录数:6	    
	    */
   }   
2)使用pageInfo实现更加详细的查询,突出功能---查询页码导航getNavigatepageNums()可以得到连续的页码数,

  

   /**使用pageInfo 实现更详细查询*/
   @Test
   public void test3() {
	   try {
		InputStream in = Resources.getResourceAsStream("config.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
		SqlSession session = sessionFactory.openSession();	
		StudentDao studentDao = session.getMapper(StudentDao.class);
		
		/**查询紧跟page之后*/
		Page<Object> page = PageHelper.startPage(3, 2);
		List<Student> list = studentDao.selectPage2();
		for (Student student : list) {
			System.out.println(student);
		}
		
		/**使用pageInfo*/
		PageInfo<Student> pageInfo = new PageInfo<>(list, 2); //显示连续两个页码
		
		System.out.println("查询总页数:"+pageInfo.getPages());
		System.out.println("当前页数:"+pageInfo.getPageNum());
		System.out.println("每页大小:"+pageInfo.getPageSize());
		System.out.println("开始查询的row:"+pageInfo.getStartRow());
		System.out.println("总记录数:"+pageInfo.getTotal());
		/**新增功能*/
		System.out.println("是第一页?"+pageInfo.isIsFirstPage());
		int[] a = pageInfo.getNavigatepageNums();
		for (int i : a) {
			System.out.print(" "+i);
		}
	} catch (IOException e) {
		e.printStackTrace();
	} 
	   
	   /*
	    查询结果:
Student [id=5, name=white, NO=3333, school=null]
Student [id=6, name=周莹, NO=8859-1, school=null]
查询总页数:3
当前页数:3
每页大小:2
开始查询的row:5
总记录数:6
是第一页?false
 2 3	    
	    
	    */
	   
   }     









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏油

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值