Web分页实现及实例演示(二)——MySql limit

原创 2016年08月29日 21:30:09

可以使用sql语句来实现分页效果,以MySql为例:

在查询语句结尾添加limit a,b; 则从第a条开始,查询b条。


实现步骤基本同上一篇,两点区别:

1、组装sql语句时,最后需要添加limit,起始结束位置可以通过参数pageNum,pageSize计算得到

2、使用数据库语句分页,那么无法通过查询结果知道满足条件的总条数,所以需要一条新的sql语句来专门统计总数。


//JdbcSqlStudentDaoImpl.java 使用MySql数据库limit实现分页
package com.xf.page.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.xf.page.model.Pager;
import com.xf.page.model.Student;
import com.xf.page.util.JdbcUtil;

/**
 * @author XF
 * 使用MySql数据库limit实现分页
 */
public class JdbcSqlStudentDaoImpl implements StudentDao {

	@Override
	public Pager<Student> findStudent(Student searchModel, int pageNum,
			int pageSize) {
		// TODO Auto-generated method stub
		Pager<Student> result = null;
		List<Object> paramList = new ArrayList<Object>();
		
		String stuName = searchModel.getName();
//		System.out.println("impl : name: "+stuName);
		int gender = searchModel.getGender();
		
		StringBuilder sql = new StringBuilder("select * from t_student where 1=1");
		//因为使用了limit,无法获取总条数,所以使用另一条sql语句来查询总条数
		StringBuilder countSql = new StringBuilder("select count(id) as totalRecord from t_student where 1=1 ");
		
		if(stuName != null && !stuName.equals("")){
			sql.append(" and stu_name like ?");
			countSql.append(" and stu_name like ?");
			paramList.add("%"+stuName+"%");
		}
		if(gender == Constant.GENDER_FEMALE || gender == Constant.GENDER_MALE){
			sql.append(" and gender = ?");
			countSql.append(" and gender = ?");
			paramList.add(gender);
		}

		
		List<Student> studentList = new ArrayList<Student>(); 
		JdbcUtil jdbcUtil = null;
		try {
			jdbcUtil = new JdbcUtil();
			jdbcUtil.getConnection();
			//获取总条数
			List<Map<String, Object>> countResult = jdbcUtil.findResult(countSql.toString(), paramList);
			Map<String, Object> countMap =  countResult.get(0);
			int totalRecord = ((Number)countMap.get("totalRecord")).intValue();
			//计算总页数
			int totalPage = totalRecord / pageSize;
			//非整除+1
			if(totalRecord % pageSize != 0) totalPage +=1;
			//将pageNum限制在合理范围
			if(pageNum > totalPage) pageNum = totalPage;
			if(pageNum<1) pageNum = 1;
			int fromIndex = pageSize*(pageNum -1 );
			sql.append(" limit "+fromIndex+","+pageSize);
			//获取查询的学生记录
			List<Map<String, Object>> studentResult = jdbcUtil.findResult(sql.toString(), paramList);
			if(studentResult != null){
				for(Map<String, Object> map:studentResult){
					Student s = new Student(map);
					studentList.add(s);
				}
			}

			
			result = new Pager<Student>(pageSize, pageNum, totalRecord, totalPage, studentList);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException("查询所有数据异常!",e);
		}finally{
			if(jdbcUtil != null){
				jdbcUtil.releaseConn();
			}
		}
		return result;
	}

}


mybatis分页插件PageHelper的使用

1、添加jar包 com.github.pagehelper pagehelper 4.1.5 2、后台分页 int pageNum = 1;...
  • zd836614437
  • zd836614437
  • 2016年07月09日 21:56
  • 9168

为什么pageHelper超过最大页数后还会返回数据

问题描述:在微服务里面做查询接口,用到pageHelper,数据库只有8行数据,pageNum=1&pageSize=10,pageNum=2&pageSize=10,pageNum=3&pageSi...
  • rickiyeat
  • rickiyeat
  • 2017年03月14日 14:07
  • 4885

java分页类Page

package com.h3c.itac.util; import java.util.ArrayList; import java.util.List; @SuppressWarnings("r...
  • qq931399960
  • qq931399960
  • 2015年04月24日 16:47
  • 4820

MyBatis学习总结(17)——Mybatis分页插件PageHelper

如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件。 分页插件支持任何复杂的单表、多表分页,部分特殊情况请看重要提示。 想要使用分页插件?请看如何使用分页插件。 物理分页 ...
  • u012562943
  • u012562943
  • 2016年07月06日 14:41
  • 13297

MySql分页查询的那些坑和各种技巧

转自:http://blog.jamespan.me/2015/01/22/trick-of-paging-query/ 背景 从上周开始我就一直在做数据清洗的工作,这次算是体会到了什么叫...
  • chelen_jak
  • chelen_jak
  • 2015年04月18日 09:23
  • 998

分页计算总页数算法

分页计算总页数算法
  • paincupid
  • paincupid
  • 2015年12月10日 19:01
  • 23875

web分页查询

  • 2017年10月12日 23:29
  • 29.96MB
  • 下载

Web分页实现及实例演示(一)——subList()

有一个学生表,可以通过姓名进行模糊查找,或者性别查找。 使用subList()实现,步骤(MVC): (M)根据查询条件生成有一定信息的Student对象,查询出所有符合条件的学生,所有信息存...
  • u011299745
  • u011299745
  • 2016年08月29日 19:27
  • 1566

分页查询实例

分页查询实例
  • myitec
  • myitec
  • 2015年12月01日 02:32
  • 671

layPage分页示例

效果如下: HTML代码: 引入:   //总页数 //当前页 //分页容器显示的地方 js代码: var totalNum= document.getElem...
  • u013126379
  • u013126379
  • 2017年01月12日 18:46
  • 6234
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Web分页实现及实例演示(二)——MySql limit
举报原因:
原因补充:

(最多只允许输入30个字)