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;
	}

}


相关文章推荐

jsp+MySQL的查询结果分页显示[实例]

已验证可以执行的代码。 初学,谨作为个人学习记录。 请大家给出意见或建议。谢谢!    //驱动程序名,比较旧了,如果你用mysql5,自己改。  String driv...
  • sj1900
  • sj1900
  • 2010年10月18日 00:07
  • 7123

MySql实现分页查询的SQL,mysql实现分页查询的sql语句

摘要:MySql数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql...

利用MySQL实现分页的web小项目

1、准备工作: 1.1、背景: 以一个网上书城为背景,每页展示5本待售的书籍,展示给用户的内容包括:书籍的名字、作者、售价。要求实现基本的页面跳转功能。 1.2、数据源: 在MySQL中新建一个tes...

MySQL分页查询和模糊查询中的小细节

1.MySQL分页查询-----limit MySQL使用limit来分页,SqlServer一般是用top来分页,oracle是用Rownum来进行分页 select * from 表名 lim...

JDBC实例-分页查询-limit

十年之前 我不认识你 你属于我 我们还是一样 陪在一个陌生人左右JDBC-MySQL分页查询目录结构:SQl 语句-limitString sql = "select * from tb_Boo...

SSM框架(Maven项目)-利用 limit 分页实例

SSM框架(Maven项目)-limit 分页实例 利用 SQL 语句中的 limit 实现分页。 select id="findByPage" parameterType="Map" ...

javaweb mysql实现分页功能

javaweb用mysql数据库, 在开发页面中我们常常用到分页技术,类似于 当然我只是实现功能,界面美化还要你们自己做。...

mybatis分页插件PageHelper的使用

1、添加jar包 com.github.pagehelper pagehelper 4.1.5 2、后台分页 int pageNum = 1;...

Mybatis分页插件 - PageHelper

GIT项目地址:http://git.oschina.net/free/Mybatis_PageHelper@RequestMapping("list.html") public String l...

分页技术--sql语句的分页

常见分页的几种方式:                                                                                          ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Web分页实现及实例演示(二)——MySql limit
举报原因:
原因补充:

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