国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Hibernate框架數據分頁技術實例分析

2019-11-26 14:29:00
字體:
來源:轉載
供稿:網友

本文實例講述了Hibernate框架數據分頁技術。分享給大家供大家參考,具體如下:

1.數據分頁機制基本思想:

(1)確定記錄跨度,即確定每頁顯示的記錄條數,可根據實際情況而定。
(2)獲取記錄總數,即獲取要顯示在頁面中的總記錄數,其目的是根據該數來確定總的分布數。
(3)確定分頁后的總頁數。可根據公式:“總頁數=(總記錄數 - 1) / 每頁顯示的記錄數 + 1”。
(4)根據當前頁數顯示數據。如果該頁數小于1,則使其等于1;如果大于最大頁數,則使其等于最大頁數。
(5)通過For、While循環語句分布顯示查詢結果。

2.獲取前n條記錄:

SQL語法:

SELECT TOP nFROM tableWHERE ...ORDER BY ...

例如:獲取前4條記錄

select top 4 * from car

3.獲取分頁數據:

String sql = "select top"+pagesize+"* from car where id notin (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 tableWHERE...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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉门市| 高州市| 东方市| 昆明市| 井冈山市| 东兰县| 通海县| 连城县| 丁青县| 光山县| 福贡县| 葫芦岛市| 棋牌| 曲沃县| 富宁县| 嘉禾县| 黄石市| 虞城县| 张掖市| 芷江| 沙田区| 澜沧| 屯昌县| 沈阳市| 佳木斯市| 阿城市| 思茅市| 抚远县| 正阳县| 阿图什市| 叙永县| 东阳市| 扶风县| 巴楚县| 靖安县| 孝感市| 宁都县| 永济市| 瑞丽市| 塘沽区| 卓资县|