最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Hibernate框架數(shù)據(jù)分頁技術(shù)實(shí)例分析

 更新時(shí)間:2016年03月24日 10:20:12   作者:TKD03072010  
這篇文章主要介紹了Hibernate框架數(shù)據(jù)分頁技術(shù),結(jié)合實(shí)例形式分析了Hibernate框架實(shí)現(xiàn)數(shù)據(jù)分頁的原理,步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下

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

1.數(shù)據(jù)分頁機(jī)制基本思想:

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

2.獲取前n條記錄:

SQL語法:

SELECT TOP n
FROM table
WHERE ...
ORDER BY ...

例如:獲取前4條記錄

select top 4 * from car

3.獲取分頁數(shù)據(jù):

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

其中參數(shù)說明如下:

pagesize:每頁顯示的記錄數(shù)
page:當(dāng)前頁數(shù)
car:數(shù)據(jù)表名

4.MySQL 數(shù)據(jù)庫分頁

MySQL數(shù)據(jù)庫提供了LIMIT函數(shù),利用該函數(shù)可輕松實(shí)現(xiàn)數(shù)據(jù)分頁。
LIMIT函數(shù)用來限制SELECT查詢語句返回的行數(shù)。

語法:

SELECT ...FROM table
WHERE...
ORDER BY ...
LIMIT [offset], rows

其中參數(shù)說明如下:

offset:指定要返回的第一行的偏移量。開始行的偏移量是0。是可選的。
rows:指定返回行的數(shù)目。

5.MySQL獲取分頁數(shù)據(jù)

/**
*
* @param page 第幾頁
* @param pagesize 每頁顯示記錄數(shù)
* @return 返回結(jié)果集
*/
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; // 定義查詢結(jié)果集對(duì)象
  try {
    pstmt = conn.createStatement();
    rs = pstmt.executeQuery(strSql); // 執(zhí)行查詢語句
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    try {
      if (pstmt != null) {
        rs.close();
        pstmt.close();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  return rs; // 返回結(jié)果集
}

6.數(shù)據(jù)分頁示例

6.1Paging項(xiàng)目結(jié)構(gòu):

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"); // 靜態(tài)塊中實(shí)現(xiàn)加載數(shù)據(jù)庫驅(qū)動(dòng)
    } 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();
  // 根據(jù)分頁
  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; // 定義查詢結(jié)果集對(duì)象
    List lstList = new ArrayList(); // 定義集合對(duì)象
    try {
      pstmt = conn.createStatement();
      rs = pstmt.executeQuery(strSql); // 執(zhí)行查詢語句
      while (rs.next()) { // 循環(huán)遍歷查詢結(jié)果集
        Car car = new Car(); // 創(chuàng)建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); // 向集合中添加對(duì)象
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        if (pstmt != null) {
          rs.close();
          pstmt.close();
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    return lstList; // 返回查詢集合對(duì)象
  }
  /**
   *
   * @param page 第幾頁
   * @param pagesize 每頁顯示記錄數(shù)
   * @return 返回結(jié)果集
   */
  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; // 定義查詢結(jié)果集對(duì)象
    try {
      pstmt = conn.createStatement();
      rs = pstmt.executeQuery(strSql); // 執(zhí)行查詢語句
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        if (pstmt != null) {
          rs.close();
          pstmt.close();
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    return rs; // 返回結(jié)果集
  }
  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">
          車牌號(hào)
        </td>
        <td width="67">
          車輛名稱
        </td>
        <td width="67">
          品牌
        </td>
        <td width="67">
          發(fā)動(dòng)機(jī)編號(hào)
        </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%>頁,當(dāng)前頁是第<%=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運(yùn)行結(jié)果截圖:

7.Hibernate分頁

7.1HQL分頁

HQL主要是通過setFirstResult()方法與setMaxResults()方法來實(shí)現(xiàn)數(shù)據(jù)分頁。

(1)setFirstResult(int index)方法 用于檢索數(shù)據(jù)開始索引位置,索引位置起始值為0。

(2)setMaxResults(int amount) 方法用于計(jì)算每次最多加載的記錄條數(shù),默認(rèn)情況下從設(shè)定的開始索引位置到最后。

例如:檢索出從索引位置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 數(shù)據(jù)分頁方法:

/**
* 使用hql語句進(jìn)行分頁查詢
* @param hql 需要查詢的hql語句
* @param offset 第一條記錄索引
* @param pageSize 每頁需要顯示的記錄數(shù)
* @return 當(dāng)前頁的所有記錄
*/
public List findByPage(final String hql,
  final int offset, final int pageSize)
{
  //通過一個(gè)HibernateCallback對(duì)象來執(zhí)行查詢
  List list = getHibernateTemplate()
    .executeFind(new HibernateCallback()
  {
    //實(shí)現(xiàn)HibernateCallback接口必須實(shí)現(xiàn)的方法
    public Object doInHibernate(Session session)
      throws HibernateException, SQLException
    {
      //執(zhí)行Hibernate分頁查詢
      List result = session.createQuery(hql)
        .setFirstResult(offset)
        .setMaxResults(pageSize)
        .list();
      return result;
    }
  });
  return list;
}
/**
 * 使用hql語句進(jìn)行分頁查詢
 * @param hql 需要查詢的hql語句
 * @param value 如果hql有一個(gè)參數(shù)需要傳入,value就是傳入hql語句的參數(shù)
 * @param offset 第一條記錄索引
 * @param pageSize 每頁需要顯示的記錄數(shù)
 * @return 當(dāng)前頁的所有記錄
 */
public List findByPage(final String hql , final Object value ,
  final int offset, final int pageSize)
{
  //通過一個(gè)HibernateCallback對(duì)象來執(zhí)行查詢
  List list = getHibernateTemplate()
    .executeFind(new HibernateCallback()
  {
    //實(shí)現(xiàn)HibernateCallback接口必須實(shí)現(xiàn)的方法
    public Object doInHibernate(Session session)
      throws HibernateException, SQLException
    {
      //執(zhí)行Hibernate分頁查詢
      List result = session.createQuery(hql)
        //為hql語句傳入?yún)?shù)
        .setParameter(0, value)
        .setFirstResult(offset)
        .setMaxResults(pageSize)
        .list();
      return result;
    }
  });
  return list;
}
/**
 * 使用hql語句進(jìn)行分頁查詢
 * @param hql 需要查詢的hql語句
 * @param values 如果hql有多個(gè)個(gè)參數(shù)需要傳入,values就是傳入hql的參數(shù)數(shù)組
 * @param offset 第一條記錄索引
 * @param pageSize 每頁需要顯示的記錄數(shù)
 * @return 當(dāng)前頁的所有記錄
 */
public List findByPage(final String hql, final Object[] values,
  final int offset, final int pageSize)
{
  //通過一個(gè)HibernateCallback對(duì)象來執(zhí)行查詢
  List list = getHibernateTemplate()
    .executeFind(new HibernateCallback()
  {
    //實(shí)現(xiàn)HibernateCallback接口必須實(shí)現(xiàn)的方法
    public Object doInHibernate(Session session)
      throws HibernateException, SQLException
    {
      //執(zhí)行Hibernate分頁查詢
      Query query = session.createQuery(hql);
      //為hql語句傳入?yún)?shù)
      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;
}

希望本文所述對(duì)大家基于Hibernate框架的Java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 一文詳解Spring是怎樣處理循環(huán)依賴的

    一文詳解Spring是怎樣處理循環(huán)依賴的

    循環(huán)依賴簡單理解就是A,B 兩個(gè)bean相互依賴,A依賴B,B依賴A,A->B、B->A大概就是這樣,這篇文章主要介紹了Spring是怎樣處理循環(huán)依賴的,文中通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-01-01
  • IntelliJ IDEA 2019.3激活破解的詳細(xì)方法(親測有效,可激活至 2089 年)

    IntelliJ IDEA 2019.3激活破解的詳細(xì)方法(親測有效,可激活至 2089&

    本教程適用于 JetBrains 全系列產(chǎn)品,包括 Pycharm、IDEA、WebStorm、Phpstorm、Datagrip、RubyMine、CLion、AppCode 等,本教程無需修改 hosts 文件,對(duì)IntelliJ IDEA 2019.3激活破解的詳細(xì)方法的相關(guān)知識(shí)感興趣的朋友一起看看吧
    2020-09-09
  • java檢測redis是否可用的方法示例

    java檢測redis是否可用的方法示例

    這篇文章主要給大家介紹了關(guān)于java檢測redis是否可用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • JAVA遍歷一個(gè)文件夾中的所有文件的小例子

    JAVA遍歷一個(gè)文件夾中的所有文件的小例子

    在實(shí)際項(xiàng)目中給定一文件夾,得到這個(gè)文件夾下所有的文件這樣的需求并不是很多,更多的是查找或是刪除某一具體的文件
    2013-10-10
  • Java的云打印Lodop

    Java的云打印Lodop

    這篇文章主要介紹了Java的云打印Lodop 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • Java NIO實(shí)戰(zhàn)之聊天室功能詳解

    Java NIO實(shí)戰(zhàn)之聊天室功能詳解

    這篇文章主要介紹了Java NIO實(shí)戰(zhàn)之聊天室功能,結(jié)合實(shí)例形式詳細(xì)分析了java NIO聊天室具體的服務(wù)端、客戶端相關(guān)實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • springboot 基于Tomcat容器的自啟動(dòng)流程分析

    springboot 基于Tomcat容器的自啟動(dòng)流程分析

    這篇文章主要介紹了springboot 基于Tomcat容器的自啟動(dòng)流程分析,Spring通過注解導(dǎo)入Bean大體可分為四種方式,我們主要來說Import的兩種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2020-02-02
  • Java設(shè)計(jì)模式中橋接模式應(yīng)用詳解

    Java設(shè)計(jì)模式中橋接模式應(yīng)用詳解

    橋接,顧名思義,就是用來連接兩個(gè)部分,使得兩個(gè)部分可以互相通訊。橋接模式將系統(tǒng)的抽象部分與實(shí)現(xiàn)部分分離解耦,使他們可以獨(dú)立的變化。本文通過示例詳細(xì)介紹了橋接模式的原理與使用,需要的可以參考一下
    2022-11-11
  • SpringBoot中的配置類(@Configuration)

    SpringBoot中的配置類(@Configuration)

    這篇文章主要介紹了SpringBoot中的配置類(@Configuration),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • CompletableFuture創(chuàng)建及功能使用全面詳解

    CompletableFuture創(chuàng)建及功能使用全面詳解

    這篇文章主要為大家介紹了CompletableFuture創(chuàng)建及功能使用全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07

最新評(píng)論

拜城县| 鹿邑县| 广水市| 汾西县| 奎屯市| 西乌珠穆沁旗| 陵川县| 浦东新区| 寻乌县| 泸定县| 手游| 屯门区| 合山市| 武强县| 凭祥市| 桃源县| 遂昌县| 当阳市| 定州市| 阿克陶县| 玉林市| 泽普县| 桃源县| 顺义区| 西峡县| 巴青县| 大兴区| 凌源市| 许昌市| 申扎县| 辽阳县| 富宁县| 温州市| 武宣县| 新邵县| 岳阳县| 荔浦县| 大关县| 庄浪县| 澎湖县| 南部县|