บทความนี้อธิบายถึงเทคโนโลยีการเพจข้อมูล Hibernate Framework แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
1. แนวคิดพื้นฐานของกลไกการเพจข้อมูล:
(1) กำหนดช่วงการบันทึกนั่นคือกำหนดจำนวนระเบียนที่แสดงในแต่ละหน้าซึ่งสามารถกำหนดได้ตามสถานการณ์จริง
(2) รับจำนวนระเบียนทั้งหมดนั่นคือรับจำนวนระเบียนทั้งหมดที่จะแสดงบนหน้า วัตถุประสงค์คือเพื่อกำหนดจำนวนการแจกแจงทั้งหมดตามจำนวนนี้
(3) กำหนดจำนวนหน้าทั้งหมดหลังจากการเพจ คุณสามารถใช้สูตร: "จำนวนหน้าทั้งหมด = (จำนวนทั้งหมดของบันทึก - 1) / จำนวนระเบียนที่แสดงต่อหน้า + 1"
(4) แสดงข้อมูลตามจำนวนหน้าปัจจุบัน หากจำนวนหน้าน้อยกว่า 1 มันจะถูกสร้างขึ้นเท่ากับ 1; หากมีมากกว่าจำนวนหน้าสูงสุดมันจะถูกสร้างขึ้นเท่ากับจำนวนหน้าสูงสุด
(5) แสดงผลการค้นหาผ่านและในขณะที่การกระจายคำสั่งลูป
2. รับบันทึก N ก่อนหน้า:
ไวยากรณ์ SQL:
เลือกตาราง NFROM ด้านบน ... สั่งซื้อโดย ...
ตัวอย่างเช่น: รับ 4 บันทึกแรก
เลือก 4 TOP 4 * จากรถยนต์
3. รับข้อมูลเพจ:
String SQL = "SELECT TOP"+PAGESIZE+"* จากรถยนต์ที่ id notin (เลือก top"+(page-1)* pageSize+"id จากคำสั่งซื้อรถยนต์ตามลำดับ ASC) สั่งซื้อโดย id asc
พารามิเตอร์มีดังนี้:
PAGESIZE: จำนวนระเบียนที่แสดงต่อหน้า
หน้า: จำนวนหน้าปัจจุบัน
รถยนต์: ชื่อตารางข้อมูล
4. การแบ่งหน้าฐานข้อมูล MYSQL
ฐานข้อมูล MySQL มีฟังก์ชั่นขีด จำกัด ซึ่งช่วยให้การเพจข้อมูลง่ายขึ้น
ฟังก์ชั่นขีด จำกัด ใช้เพื่อ จำกัด จำนวนแถวที่ส่งคืนโดยคำสั่ง Select Query
ไวยากรณ์:
เลือก ... จากตารางที่ ... สั่งซื้อโดย ... จำกัด [ออฟเซ็ต] แถว
พารามิเตอร์มีดังนี้:
ออฟเซ็ต: ระบุออฟเซ็ตของแถวแรกที่จะส่งคืน ออฟเซ็ตของบรรทัดเริ่มต้นคือ 0 เป็นตัวเลือก
แถว: ระบุจำนวนแถวที่ส่งคืน
5.MYSQL ได้รับข้อมูลที่น่าสนใจ
/**** @param หน้าหน้า* @param หน้าจำนวนเร็กคอร์ดที่แสดงต่อหน้า* @return กลับมาชุดผลลัพธ์*/public resultset findorter (หน้า int, หน้า int) {string strsql = "เลือก* จากคำสั่งซื้อรถยนต์ตามขีด จำกัด ของรหัส" + (หน้า - 1)* pagesize + "," // กำหนดคำสั่ง SQL Query คำสั่ง pstmt = null; ผลลัพธ์ RS = NULL; // กำหนดวัตถุชุดผลลัพธ์การสืบค้นลอง {pstmt = conn.createstatement (); rs = pstmt.executeQuery (strsql); // เรียกใช้คำสั่ง Query} catch (Exception E) {E.printStackTrace (); } ในที่สุด {ลอง {ถ้า (pstmt! = null) {rs.close (); pstmt.close (); }} catch (exception e) {e.printstacktrace (); }} return rs; // กลับมาชุดผลลัพธ์}6. ตัวอย่างการเพจข้อมูล
6.1Paging โครงสร้างโครงการ:
รายการโปรแกรม 6.2car.java:
แพ็คเกจ com.cdd.util;/** * ข้อมูลยานพาหนะ * @author xu qiao hui * */รถคลาสสาธารณะ {รหัสสตริงส่วนตัว; ชื่อสตริงส่วนตัว ;; แบรนด์สตริงส่วนตัว สตริงส่วนตัว enginenum; สถานะสตริงส่วนตัว ข้อสังเกตสตริงส่วนตัว รถยนต์สาธารณะ (ขนาด int) {} รถสาธารณะ () {} รถสาธารณะ (รหัสสตริง, ชื่อสตริง, แบรนด์สตริง, สตริง enginenum, สถานะสตริง, ข้อสังเกตสตริง) {super (); id = id; this.name = ชื่อ; this.brand = Brand; this.enginenum = enginenum; this.state = state; สิ่งนี้ remarks = ข้อสังเกต; } สตริงสาธารณะ getId () {return id; } โมฆะสาธารณะ setId (string id) {id = id; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } สตริงสาธารณะ getBrand () {return brand; } โมฆะสาธารณะ setBrand (แบรนด์สตริง) {this.brand = Brand; } สตริงสาธารณะ getenginenum () {return enginenum; } โมฆะสาธารณะ setenginenum (string enginenum) {this.enginenum = enginenum; } สตริงสาธารณะ getState () {return state; } โมฆะสาธารณะ setState (สถานะสตริง) {this.state = state; } Public String getRemarks () {return motarks; } โมฆะสาธารณะ setRemarks (หมายเหตุสตริง) {this.Remarks = ข้อสังเกต; -รายการโปรแกรม 6.3getConn.java:
แพ็คเกจ com.cdd.util; นำเข้า java.sql.*; คลาสสาธารณะ getconn {คงที่ {ลอง {class.forname ("com.mysql.jdbc.driver"); // ใช้ไดรเวอร์การโหลดฐานข้อมูลในบล็อกคงที่} catch (classnotFoundException e) {E.printStackTrace (); }} การเชื่อมต่อสาธารณะ getConn () {การเชื่อมต่อการเชื่อมต่อ = null; string url = "jdbc: mysql: // localhost: 3306/oa"; String username = "root"; สตริงรหัสผ่าน = "1120"; ลอง {connection = driverManager.getConnection (URL, ชื่อผู้ใช้, รหัสผ่าน); System.out.println ("ตกลง"); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } ส่งคืนการเชื่อมต่อ; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {getConn getConn = new getConn (); getConn.getConn (); -6.4paginationutil.java รายการโปรแกรม:
แพ็คเกจ com.cdd.util; นำเข้า java.util.*; นำเข้า java.sql.*; Public Class PaginationUtil {getConn getConn = ใหม่ getConn (); Connection conn = getConn.getConn (); // รายการสาธารณะ findGrade (หน้า int, หน้า int) {string strsql = "เลือก * จากคำสั่งซื้อรถยนต์ตามขีด จำกัด ID" + (หน้า - 1) * pageSize + "," + pagesize + ""; // กำหนดคำสั่ง SQL Query คำสั่ง pstmt = null; ผลลัพธ์ RS = NULL; // กำหนดชุดผลลัพธ์การสืบค้นรายการวัตถุ lstlist = new ArrayList (); // กำหนดวัตถุคอลเลกชันลอง {pstmt = conn.createstatement (); rs = pstmt.executeQuery (strsql); // เรียกใช้คำสั่ง Query ในขณะที่ (Rs.Next ()) {// วนลูปผ่านชุดผลลัพธ์การสืบค้นรถยนต์รถยนต์ = รถใหม่ (); // สร้าง car car.setId (rs.getString ("id")); car.setName (rs.getString ("ชื่อ")); car.setBrand (Rs.getString ("Brand")); car.setenginenenum (Rs.getString ("enginenum")); car.setstate (Rs.getString ("State")); car.setRemarks (Rs.getString ("หมายเหตุ")); lstlist.add (Car); // เพิ่มวัตถุไปยังคอลเลกชัน}} catch (Exception e) {E.printStackTrace (); } ในที่สุด {ลอง {ถ้า (pstmt! = null) {rs.close (); pstmt.close (); }} catch (exception e) {e.printstacktrace (); }} ส่งคืน lstlist; // return Query Collection Object}/ ** * * @param หน้าหน้า * @param หน้าจำนวนเร็กคอร์ดที่แสดงต่อหน้า * @return return set ผลลัพธ์ */ public resultset findorender (หน้า int, หน้า int) {string strsql = "เลือก * จากคำสั่งซื้อรถยนต์ // กำหนดคำสั่ง SQL Query คำสั่ง pstmt = null; ผลลัพธ์ RS = NULL; // กำหนดวัตถุชุดผลลัพธ์การสืบค้นลอง {pstmt = conn.createstatement (); rs = pstmt.executeQuery (strsql); // เรียกใช้คำสั่ง Query} catch (Exception E) {E.printStackTrace (); } ในที่สุด {ลอง {ถ้า (pstmt! = null) {rs.close (); pstmt.close (); }} catch (exception e) {e.printstacktrace (); }} return rs; // ส่งคืนชุดผลลัพธ์} public int allpage (int pagesize) {int allp = 0; ลอง {คำสั่ง pstmt = conn.createstatement (); pstmt.execute ("เลือกนับ (*) จากรถยนต์"); resultset rs = pstmt.getResultset (); System.out.print ("00"); Rs.Next (); int ทั้งหมด = rs.getInt (1); System.out.print (ทั้งหมด); Allp = (All - 1) / Pagesize + 1; System.out.println (Allp); } catch (sqlexception e) {e.printstacktrace (); } ส่งคืน Allp; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {paginationutil pageNationutil = new paginationutil (); รายการรายการ = pageNinationutil.findgrade (2, 6); สำหรับ (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"%> <% path String = request.getContextPath (); String basepath = request.getScheme () + ": //" + request.getServerName () + ":" + request.getServerport () + path + "/";%> <! <title> หน้าเริ่มต้น jsp 'index.jsp' ของฉัน </title> <meta http-equiv = "pragma" content = "no-cache"> <meta http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "expires" content = "0" content = "keyword1, keyword2, keyword3"> <meta http-equiv = "คำอธิบาย" content = "นี่คือหน้าของฉัน"> <!-<link rel = "stylesheet" type = "text/css" href = "centles.css">-> </head> BorderColor = "#cc00cc"> <tr> <td> หมายเลขป้ายทะเบียน </td> <td> ชื่อยานพาหนะ </td> <td> แบรนด์ </td> <td> หมายเลขเครื่องยนต์ </td> </tr> int pageno = 0; if (request.getParameter ("no") == null) {pageno = 1; } else {pageno = integer.parseint (request.getParameter ("no")); } รายการ cc = paginationutil.findgrade (pageno, 3); ตัววนซ้ำ i = cc.iterator (); ในขณะที่ (i.hasnext ()) {car car = (car) i.next (); out.print ("<tr> <td>" + car.getId () + "</td>" + "<td>" + car.getName () + "</td>" + "<td>" + car.getBrand () + "</td>" + "<td>" } int ทั้งหมด = paginationutil.allPage (3); %> </ster> <center> ทั้งหมด <%= ทั้งหมด%> หน้าหน้าปัจจุบันคือ <%= pageno%> หน้า <%ถ้า (pageno> 1) {%> <a href = "index.jsp? no = <%= pageno - 1%>" หน้าก่อนหน้า </a> <%} href = "index.jsp? no = <%= pageno + 1%>"> หน้าถัดไป </a> <%}%> </enter> </body> </html>6.6 ที่อยู่การเข้าถึง:
http: // x-pc: 8080/paging/index.jsp
6.7 ภาพหน้าจอของผลการทำงาน:
7.
7.1HQL การแบ่งหน้า
HQL ส่วนใหญ่ใช้การเพจข้อมูลผ่านวิธี setFirstResult () และวิธี setMaxResults ()
(1) วิธีการ SetFirStreSult (INT ดัชนี) ใช้เพื่อดึงตำแหน่งดัชนีเริ่มต้นข้อมูลและตำแหน่งดัชนีเริ่มต้นที่ 0
(2) วิธีการ setMaxResults (จำนวน int) ใช้ในการคำนวณจำนวนสูงสุดของระเบียนที่โหลดในแต่ละครั้งและโดยค่าเริ่มต้นมันมาจากตำแหน่งดัชนีเริ่มต้นที่ตั้งไว้เป็นครั้งสุดท้าย
ตัวอย่างเช่น: ดึง 5 ระเบียนเริ่มจากตำแหน่งดัชนี 2
Query Q = session.createquery ("Form Car"); q.setFirstresult (2); q.setMaxResults (5);7.2QBC การแบ่งหน้า
ตัวอย่างเช่น: ดึง 5 ระเบียนเริ่มจากตำแหน่งดัชนี 2
เกณฑ์ c = session.createCriteria ("Form Car"); C.SetFirstresult (2); C.SetMaxResults (5);7.3 วิธีการเพจข้อมูล:
/*** ใช้คำสั่ง hql สำหรับการสืบค้นหน้า* @param hql hql คำสั่งที่ต้องค้นหา* @param ออฟเซ็ตดัชนีบันทึกแรก* @param หน้าจำนวนบันทึกที่จะแสดงต่อหน้า* @return บันทึกทั้งหมดของหน้าเว็บ getHibernatetemplate () .ExecuteFind (ใหม่ hibernateCallback () {// วิธีการที่จะต้องนำไปใช้ในอินเตอร์เฟส hibernatecallback วัตถุสาธารณะ doinhibernate (เซสชันเซสชัน) พ่น HibernateException, sqlexception {// .SetMaxResults (PAGESIZE) .List (); return list;}/*** ใช้คำสั่ง hql สำหรับการสืบค้นหน้า* @param hql hql คำสั่งที่จำเป็นต้องสอบถาม* @param ค่าหาก HQL มีพารามิเตอร์ที่ต้องส่งผ่านค่าพารามิเตอร์ของคำสั่ง HQL รายการ findByPage (สตริงสุดท้าย HQL, ค่าวัตถุสุดท้าย, การชดเชย int สุดท้าย, หน้า int สุดท้าย) {// ดำเนินการสืบค้นผ่านรายการวัตถุ hibernateCallback รายการ = getHibernatetemplate () .ExecuteFind Sqlexception {// ดำเนินการสืบค้น pagination hibernate result = session.createquery (hql) // pause พารามิเตอร์สำหรับคำสั่ง HQL.setParameter (0, ค่า) .setFirstresult (ชดเชย) return list;}/*** ใช้คำสั่ง hql สำหรับการสืบค้น pagination* @param hql hql คำสั่งที่จำเป็นต้องสอบถาม* @param ค่าถ้า hql มีพารามิเตอร์หลายตัวที่จะส่งผ่านค่าพารามิเตอร์ของ hql* @param @Param findByPage (สตริงสุดท้าย HQL, วัตถุสุดท้าย [] ค่า, ออฟเซ็ต int สุดท้าย, หน้า int สุดท้าย) {// ดำเนินการสืบค้นผ่านรายการวัตถุ hibernateCallback รายการ = getHibernatetemplate () .ExecuteFind SQLException {// ดำเนินการสืบค้นแบบสอบถาม PAGINATH HIBERNATE PAGINATION QUERY = Session.Createquery (HQL); .List (); รายการส่งคืน;}ฉันหวังว่าคำอธิบายในบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคนตามกรอบการทำงานของไฮเบอร์เนต