gpt4 book ai didi

Hibernate框架数据分页技术实例分析

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Hibernate框架数据分页技术实例分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了Hibernate框架数据分页技术。分享给大家供大家参考,具体如下:

1.数据分页机制基本思想:

(1)确定记录跨度,即确定每页显示的记录条数,可根据实际情况而定。 (2)获取记录总数,即获取要显示在页面中的总记录数,其目的是根据该数来确定总的分布数。 (3)确定分页后的总页数。可根据公式:“总页数=(总记录数 - 1) / 每页显示的记录数 + 1”。 (4)根据当前页数显示数据。如果该页数小于1,则使其等于1;如果大于最大页数,则使其等于最大页数。 (5)通过For、While循环语句分布显示查询结果.

2.获取前n条记录

SQL语法:

?
1
2
3
4
SELECT TOP n
FROM table
WHERE ...
ORDER   BY ...

例如:获取前4条记录 。

?
1
select top 4 * from car

3.获取分页数据:

?
1
2
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查询语句返回的行数.

语法:

?
1
2
3
4
SELECT ... FROM table
WHERE ...
ORDER BY ...
LIMIT [offset], rows

其中参数说明如下:

offset:指定要返回的第一行的偏移量。开始行的偏移量是0。是可选的。 rows:指定返回行的数目.

5.MySQL获取分页数据 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
*
* @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项目结构:

Hibernate框架数据分页技术实例分析

6.2Car.java程序清单:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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程序清单:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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程序清单:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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程序清单:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<%@ 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运行结果截图:

Hibernate框架数据分页技术实例分析

7.Hibernate分页 。

7.1HQL分页 。

HQL主要是通过setFirstResult()方法与setMaxResults()方法来实现数据分页.

(1)setFirstResult(int index)方法 用于检索数据开始索引位置,索引位置起始值为0.

(2)setMaxResults(int amount) 方法用于计算每次最多加载的记录条数,默认情况下从设定的开始索引位置到最后.

例如:检索出从索引位置2开始的5条记录 。

?
1
2
3
Query q = session.createQuery( "form car" );
q.setFirstResult( 2 );
q.setMaxResults( 5 );

7.2QBC分页 。

例如:检索出从索引位置2开始的5条记录 。

?
1
2
3
Criteria c = session.createCriteria( "form car" );
c.setFirstResult( 2 );
c.setMaxResults( 5 );

7.3 数据分页方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/**
* 使用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程序设计有所帮助.

最后此篇关于Hibernate框架数据分页技术实例分析的文章就讲到这里了,如果你想了解更多关于Hibernate框架数据分页技术实例分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com