本文实例讲述了Hibernate框架数据分页技术。分享给大家供大家参考,具体如下: 1.数据分页机制基本思想: (1)确定记录跨度,即确定每页显示的记录条数,可根据实际情况而定。 (2)获取记录总数,即获取要显示在页面中的总记录数,其目的是根据该数来确定总的分布数。 (3)确定分页后的总页数。可根据公式:“总页数=(总记录数 - 1) / 每页显示的记录数 + 1”。 (4)根据当前页数显示数据。如果该页数小于1,则使其等于1;如果大于最大页数,则使其等于最大页数。 (5)通过For、While循环语句分布显示查询结果。 2.获取前n条记录: SQL语法: - SELECT TOP n
- FROM table
- WHERE ...
- ORDER BY ...
复制代码 例如:获取前4条记录 3.获取分页数据: - String sql = "select top"+pagesize+"* from car where id not
- in (select top "+(page-1)*pagesize+"id from car order by id ASC)
- order by id ASC
复制代码 其中参数说明如下: pagesize:每页显示的记录数 page:当前页数 car:数据表名 4.MySQL 数据库分页 mysql数据库提供了LIMIT函数,利用该函数可轻松实现数据分页。 LIMIT函数用来限制SELECT查询语句返回的行数。 语法: - SELECT ...FROM table
- WHERE...
- ORDER BY ...
- LIMIT [offset], rows
复制代码 其中参数说明如下: offset:指定要返回的第一行的偏移量。开始行的偏移量是0。是可选的。 rows:指定返回行的数目。 5.MySQL获取分页数据 - /**
- *
- * @param page 第几页
- * @param pagesize 每页显示记录数
- * @return 返回结果集
- */
- public ResultSet findOrder(int page, int pagesize) {
- String strSql = "select * from car order by id limit " + (page - 1)
- * pagesize + "," + pagesize + ""; // 定义SQL查询语句
- Statement pstmt = null;
- ResultSet rs = null; // 定义查询结果集对象
- try {
- pstmt = conn.createStatement();
- rs = pstmt.executeQuery(strSql); // 执行查询语句
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- if (pstmt != null) {
- rs.close();
- pstmt.close();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return rs; // 返回结果集
- }
复制代码 6.数据分页示例 6.1Paging项目结构:  6.2Car.java程序清单: - package com.cdd.util;
- /**
- * 车辆信息
- * @author Xu Qiao Hui
- *
- */
- public class Car {
- private String Id;
- private String name;;
- private String brand;
- private String engineNum;
- private String state;
- private String remarks;
- public Car(int size){}
- public Car(){}
- public Car(String id, String name, String brand, String engineNum,
- String state, String remarks) {
- super();
- Id = id;
- this.name = name;
- this.brand = brand;
- this.engineNum = engineNum;
- this.state = state;
- this.remarks = remarks;
- }
- public String getId() {
- return Id;
- }
- public void setId(String id) {
- Id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getBrand() {
- return brand;
- }
- public void setBrand(String brand) {
- this.brand = brand;
- }
- public String getEngineNum() {
- return engineNum;
- }
- public void setEngineNum(String engineNum) {
- this.engineNum = engineNum;
- }
- public String getState() {
- return state;
- }
- public void setState(String state) {
- this.state = state;
- }
- public String getRemarks() {
- return remarks;
- }
- public void setRemarks(String remarks) {
- this.remarks = remarks;
- }
- }
复制代码 6.3GetConn.java程序清单: - package com.cdd.util;
- import java.sql.*;
- public class GetConn {
- static {
- try {
- Class.forName("com.mysql.jdbc.Driver"); // 静态块中实现加载数据库驱动
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- public Connection getConn() {
- Connection connection = null;
- String url = "jdbc:mysql://localhost:3306/oa";
- String userName = "root";
- String passWord = "1120";
- try {
- connection = DriverManager.getConnection(url, userName, passWord);
- System.out.println("ok");
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return connection;
- }
- public static void main(String[] args) {
- GetConn getConn = new GetConn();
- getConn.getConn();
- }
- }
复制代码 6.4PaginationUtil.java程序清单: - package com.cdd.util;
- import java.util.*;
- import java.sql.*;
- public class PaginationUtil {
- GetConn getConn = new GetConn();
- Connection conn = getConn.getConn();
- // 根据分页
- public List findGrade(int page, int pagesize) {
- String strSql = "select * from car order by id limit " + (page - 1)
- * pagesize + "," + pagesize + ""; // 定义SQL查询语句
- Statement pstmt = null;
- ResultSet rs = null; // 定义查询结果集对象
- List lstList = new ArrayList(); // 定义集合对象
- try {
- pstmt = conn.createStatement();
- rs = pstmt.executeQuery(strSql); // 执行查询语句
- while (rs.next()) { // 循环遍历查询结果集
- Car car = new Car(); // 创建car
- car.setId(rs.getString("Id"));
- car.setName(rs.getString("name"));
- car.setBrand(rs.getString("brand"));
- car.setEngineNum(rs.getString("engineNum"));
- car.setState(rs.getString("state"));
- car.setRemarks(rs.getString("remarks"));
- lstList.add(car); // 向集合中添加对象
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- if (pstmt != null) {
- rs.close();
- pstmt.close();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return lstList; // 返回查询集合对象
- }
- /**
- *
- * @param page 第几页
- * @param pagesize 每页显示记录数
- * @return 返回结果集
- */
- public ResultSet findOrder(int page, int pagesize) {
- String strSql = "select * from car order by id limit " + (page - 1)
- * pagesize + "," + pagesize + ""; // 定义SQL查询语句
- Statement pstmt = null;
- ResultSet rs = null; // 定义查询结果集对象
- try {
- pstmt = conn.createStatement();
- rs = pstmt.executeQuery(strSql); // 执行查询语句
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- if (pstmt != null) {
- rs.close();
- pstmt.close();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return rs; // 返回结果集
- }
- public int allPage(int pagesize) {
- int allp = 0;
- try {
- Statement pstmt = conn.createStatement();
- pstmt.execute("select count(*) from car");
- ResultSet rs = pstmt.getResultSet();
- System.out.print("00");
- rs.next();
- int all = rs.getInt(1);
- System.out.print(all);
- allp = (all - 1) / pagesize + 1;
- System.out.println(allp);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return allp;
- }
- public static void main(String[] args) {
- PaginationUtil pageinationUtil = new PaginationUtil();
- List list = pageinationUtil.findGrade(2, 6);
- for (int i = 0; i < list.size(); i++) {
- Car car = (Car) list.get(i);
- System.out.println(car.getId() + " " + car.getName());
- }
- }
- }
复制代码 6.5index.jsp程序清单: - <%@ page language="java" import="java.util.*,com.cdd.util.*;"
- pageEncoding="gbk"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme() + "://"
- + request.getServerName() + ":" + request.getServerPort()
- + path + "/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'index.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <center>
- <h5>
- 车辆信息分页显示
- </h5>
- </center>
- <table width="400" height="44" border="1" align="center"
- bordercolor="#CC00CC" class="unnamed1">
- <tr>
- <td width="83">
- 车牌号
- </td>
- <td width="67">
- 车辆名称
- </td>
- <td width="67">
- 品牌
- </td>
- <td width="67">
- 发动机编号
- </td>
- </tr>
- <%
- PaginationUtil paginationUtil = new PaginationUtil();
- int pageNo = 0;
- if (request.getParameter("No") == null) {
- pageNo = 1;
- } else {
- pageNo = Integer.parseInt(request.getParameter("No"));
- }
- List cc = paginationUtil.findGrade(pageNo, 3);
- Iterator i = cc.iterator();
- while (i.hasNext()) {
- Car car = (Car) i.next();
- out.print("<tr><td>" + car.getId() + "</td>" + "<td>"
- + car.getName() + "</td>" + "<td>" + car.getBrand()
- + "</td>" + "<td>" + car.getEngineNum() + "</td></tr>");
- }
- int all = paginationUtil.allPage(3);
- %>
- </table>
- <center>
- 共<%=all%>页,当前页是第<%=pageNo%>页
- <%
- if (pageNo > 1) {
- %>
- <a href="index.jsp?No=<%=pageNo - 1%>">上一页</a>
- <%
- }
- %>
- <%
- if (pageNo < all) {
- %>
- <a href="index.jsp?No=<%=pageNo + 1%>">下一页</a>
- <%
- }
- %>
- </center>
- </body>
- </html>
复制代码 6.6访问地址: http://x-pc:8080/Paging/index.jsp 6.7运行结果截图:  7.Hibernate分页 7.1HQL分页 HQL主要是通过setFirstResult()方法与setMaxResults()方法来实现数据分页。 (1)setFirstResult(int index)方法 用于检索数据开始索引位置,索引位置起始值为0。 (2)setMaxResults(int amount) 方法用于计算每次最多加载的记录条数,默认情况下从设定的开始索引位置到最后。 例如:检索出从索引位置2开始的5条记录 - Query q = session.createQuery("form car");
- q.setFirstResult(2);
- q.setMaxResults(5);
复制代码 7.2QBC分页 例如:检索出从索引位置2开始的5条记录 - Criteria c = session.createCriteria("form car");
- c.setFirstResult(2);
- c.setMaxResults(5);
复制代码 7.3 数据分页方法: - /**
- * 使用hql语句进行分页查询
- * @param hql 需要查询的hql语句
- * @param offset 第一条记录索引
- * @param pageSize 每页需要显示的记录数
- * @return 当前页的所有记录
- */
- public List findByPage(final String hql,
- final int offset, final int pageSize)
- {
- //通过一个HibernateCallback对象来执行查询
- List list = getHibernateTemplate()
- .executeFind(new HibernateCallback()
- {
- //实现HibernateCallback接口必须实现的方法
- public Object doInHibernate(Session session)
- throws HibernateException, SQLException
- {
- //执行Hibernate分页查询
- List result = session.createQuery(hql)
- .setFirstResult(offset)
- .setMaxResults(pageSize)
- .list();
- return result;
- }
- });
- return list;
- }
- /**
- * 使用hql语句进行分页查询
- * @param hql 需要查询的hql语句
- * @param value 如果hql有一个参数需要传入,value就是传入hql语句的参数
- * @param offset 第一条记录索引
- * @param pageSize 每页需要显示的记录数
- * @return 当前页的所有记录
- */
- public List findByPage(final String hql , final Object value ,
- final int offset, final int pageSize)
- {
- //通过一个HibernateCallback对象来执行查询
- List list = getHibernateTemplate()
- .executeFind(new HibernateCallback()
- {
- //实现HibernateCallback接口必须实现的方法
- public Object doInHibernate(Session session)
- throws HibernateException, SQLException
- {
- //执行Hibernate分页查询
- List result = session.createQuery(hql)
- //为hql语句传入参数
- .setParameter(0, value)
- .setFirstResult(offset)
- .setMaxResults(pageSize)
- .list();
- return result;
- }
- });
- return list;
- }
- /**
- * 使用hql语句进行分页查询
- * @param hql 需要查询的hql语句
- * @param values 如果hql有多个个参数需要传入,values就是传入hql的参数数组
- * @param offset 第一条记录索引
- * @param pageSize 每页需要显示的记录数
- * @return 当前页的所有记录
- */
- public List findByPage(final String hql, final Object[] values,
- final int offset, final int pageSize)
- {
- //通过一个HibernateCallback对象来执行查询
- List list = getHibernateTemplate()
- .executeFind(new HibernateCallback()
- {
- //实现HibernateCallback接口必须实现的方法
- public Object doInHibernate(Session session)
- throws HibernateException, SQLException
- {
- //执行Hibernate分页查询
- Query query = session.createQuery(hql);
- //为hql语句传入参数
- for (int i = 0 ; i < values.length ; i++)
- {
- query.setParameter( i, values[i]);
- }
- List result = query.setFirstResult(offset)
- .setMaxResults(pageSize)
- .list();
- return result;
- }
- });
- return list;
- }
复制代码 希望本文所述对大家基于Hibernate框架的Java程序设计有所帮助。 |