本文实例讲述了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条记录
select top 4 * from car
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程序设计有所帮助。
主要内容:内存管理单元在操作系统中,分页是一种存储机制,用于以页面形式从辅助存储器检索进程到主内存中。 分页背后的主要思想是以页面的形式划分每个进程。 主存也将以帧的形式分割。 进程的一页将被存储在存储器的一个帧中。 分页可以存储在内存的不同位置,但优先级始终是查找连续的帧或空洞。 进程页面只有在需要时才会被带入主内存,否则它们将驻留在辅助存储中。 不同的操作系统定义不同的帧大小。 每个帧的大小必须相等。 考虑到页面被
主要内容:动态分区的缺点,需要分页动态分区的缺点 动态分区的主要缺点是外部碎片。 尽管这可以通过压缩来消除,但正如我们前面所讨论的那样,压缩使得系统效率低下。 我们需要找一种替代机制,以更优化的方式加载分区中的进程。 让我们讨论一个称为分页的动态灵活机制。 需要分页 让我们考虑一个大小为2 MB的进程P1和分为三个分区的主内存。 在三个分区中,两个分区是每个大小为1 MB的空洞。 P1需要在主存中加载2 MB空间。 我们有两个1M
本文向大家介绍Django框架 Pagination分页实现代码实例,包括了Django框架 Pagination分页实现代码实例的使用技巧和注意事项,需要的朋友参考一下 一、自定义分页 1、基础版自定义分页 2、封装保存版 3、封装保存版使用指南 二、Django内置分页 1、内置分页view部分 2、内置分页HTML部分 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊
本文向大家介绍Django框架实现的分页demo示例,包括了Django框架实现的分页demo示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Django框架实现的分页。分享给大家供大家参考,具体如下: 首先初始化model,建表 然后用pycharm的数据库模块可视化插入 分页思路 url传递参数http://127.0.0.1:8000/books/?page=5比如这样传递的参数
本文向大家介绍Laravel框架分页实现方法分析,包括了Laravel框架分页实现方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Laravel框架分页实现方法。分享给大家供大家参考,具体如下: Laravel使用的过程中,有些功能把前端页面的表达“写死了”,比如分页的翻页按钮! 当然你会说Laravel的Bootstrap样式也很好看啊,但是实际项目中,翻页按钮常常需要满足的客户
本文向大家介绍python Django框架实现web端分页呈现数据,包括了python Django框架实现web端分页呈现数据的使用技巧和注意事项,需要的朋友参考一下 这里介绍使用python-Django框架来实现web端分页呈现数据,主要说明对应的views,urls,templates三个文件的编程逻辑的实现。 首先介绍Django中的paginator类。paginator是Djang