เมื่อเร็ว ๆ นี้ บริษัท ต้องทำฟังก์ชั่นหน้าการเตือนซึ่งต้องมีการแบ่งแยก หลังจากตรวจสอบข้อมูลจำนวนมากพบว่า PageHelper เหมาะสมกว่า
ดังนั้นฉันจึงเขียนบทช่วยสอนเกี่ยวกับการใช้ PageHelper เริ่มต้นจากศูนย์และบันทึกสิ่งที่ฉันยุ่งมาหนึ่งวัน
1. ก่อนอื่นคุณต้องเพิ่มการพึ่งพา PageHelper ในโครงการ ที่นี่ฉันเพิ่มมันด้วย Maven
<Ederency> <sderctId> com.github.pageHelper </groupId> <ratifactId> PageHelper </artifactId> <version> 4.1.6 </version> </dependency>
2. เพิ่มการกำหนดค่าของ pageHelper ในไฟล์การกำหนดค่า mybatis
<การกำหนดค่า> <ปลั๊กอิน> <!-com.github.pageHelper เป็นชื่อแพ็คเกจที่คลาส pagehelper ตั้งอยู่-> <plugin interceptor = "com.github.pagehelper.pagehelper"> <!-พารามิเตอร์นี้สามารถตั้งค่าได้โดยไม่ต้องตั้งค่าในเวอร์ชัน 4.0.0 --- หมายเลขหน้า pagenum-> <!-เอฟเฟกต์เหมือนกับ pagenum ใน startpage-> <property name = "Offsetaspagenum" value = "true"/> <!-พารามิเตอร์นี้เริ่มต้นเป็นเท็จ-> <! หรือ rowbounds.limit = 0 ผลลัพธ์ทั้งหมดจะถูกสอบถาม-> <!-(เทียบเท่ากับความจริงที่ว่าการสืบค้นหน้าไม่ถูกดำเนินการ แต่ผลลัพธ์ยังคงเป็นประเภทหน้า)-> <ชื่อคุณสมบัติ = "pageSizezero" value = "true"/> <! หน้าแรกถ้า pagenum> หน้าจะสืบค้นหน้าสุดท้าย-> <!-เมื่อปิดใช้งานการหาเหตุผลเข้าข้างตนเองถ้า pagenum <1 หรือ pagenum> หน้าจะส่งคืนข้อมูลว่างเปล่า-> <ชื่อคุณสมบัติ = "สมเหตุสมผล" ค่า = "จริง"/> <!-เวอร์ชัน 3.5.0 หรือ ServletRequest-> <!-คุณสามารถกำหนดค่า pagenum, pagesize, count, pageizezero, สมเหตุสมผล, orderby และไม่กำหนดค่าค่าเริ่มต้นสำหรับการทำแผนที่-> <!-ถ้าคุณไม่เข้าใจความหมายนี้อย่าคัดลอกการกำหนดค่า-> <! พารามิเตอร์อินเทอร์เฟซ Mapper-> <property name = "SupportMethodSarguments" value = "true"/> <!-มักจะส่งคืนประเภท pageinfo ตรวจสอบว่าประเภทการส่งคืนเป็น pageinfo และไม่มีการส่งคืนหน้า-> <property name = "returnpageinfo" value = "ตรวจสอบ"/>
3. เพิ่มคลาส PageBean เพื่อจัดเก็บข้อมูลเพจ
ระดับสาธารณะ Pagebean <T> ใช้ serializable {ส่วนตัวคงที่สุดท้าย Long SerialVersionUid = 1L; รวมส่วนตัวทั้งหมด; // จำนวนระเบียนทั้งหมดรายการส่วนตัว <T> รายการ; // ผลลัพธ์ชุด pagenum int ส่วนตัว; // จำนวนหน้า int ส่วนตัวกี่หน้า; // จำนวนระเบียนต่อหน้าหน้าส่วนตัว // จำนวนหน้าทั้งหมดขนาด int ส่วนตัว; // num ของหน้าปัจจุบัน <= pageSize Public PageBean (รายการ <t> รายการ) {ถ้า (รายการอินสแตนซ์ของรายการ) {หน้า <t> page = (หน้า <t>) รายการ; this.pagenum = page.getPagenum (); this.pagesize = page.getPagesize (); this.total = page.getTotal (); this.pages = page.getPages (); this.list = page; this.size = page.size (); }} สาธารณะยาว getTotal () {ผลตอบแทนทั้งหมด; } โมฆะสาธารณะ settotal (รวมยาว) {this.total = total; } รายการสาธารณะ <t> getList () {รายการส่งคืน; } โมฆะสาธารณะ setlist (รายการ <t> รายการ) {this.list = list; } public int getSize () {ขนาดคืน; } โมฆะสาธารณะ setsize (ขนาด int) {this.size = size; } public int getPagenum () {return pagenum; } โมฆะสาธารณะ setpagenum (int pagenum) {this.pagenum = pagenum; } public int getPagesize () {กลับ pageSize; } โมฆะสาธารณะ setPagesize (int pageize) {this.page.ize = pageSize; } public int getPages () {หน้ากลับ; } public void setpages (หน้า int) {this.pages = หน้า; -ต่อไปนี้เป็นรหัสตรรกะทางธุรกิจ
4. ก่อนอื่นเริ่มจากไฟล์ mapper.xml ใช้งานฐานข้อมูล SQL และค้นหาข้อมูลที่เราต้องการ
<select id = "selectalllist" parameterType = "com.alarm.bean.alarmparammodel" resultmap = "AlarmMap"> เลือก message_id, seqnum, message_type, process_status, distribute_status, โปรเซสเซอร์
5. วิธีการอินเตอร์เฟส MAPPER
รายการสาธารณะ <AlmParammodel> เลือก AllList (รุ่น AlarmParammodel);
6. วิธีการอินเทอร์เฟซบริการ
DataGrid SelectallList (Model AlarmParammodel, int pagenum, หน้า int);
7. คลาสการใช้งานบริการ
เป็นสิ่งสำคัญที่จะต้องทราบที่นี่ว่ามันเป็นตรรกะหลักของการแบ่งหน้า Pagenum หมายถึงหมายเลขหน้าหน้าแสดงถึงจำนวนหน้าเว็บที่แสดงวิธี startPag คือหน้าเริ่มต้นวิธีการสั่งซื้อ BY คือการเรียงลำดับข้อมูลตามฟิลด์ที่แน่นอนที่นี่ฉันใช้ลำดับจากมากไปน้อยของ OCCR_TIME (DESC)
DataGrid Public SelectallList (โมเดล AlarmParammodel, int pagenum, หน้า int) {pageHelper.StartPage (pagenum, pageSize); pagehelper.orderby ("เกิดขึ้น _time desc"); รายการ <AlmParammodel> list = this.alarmmgrmapper.selectalllist (รุ่น); PageInfo <Almparammodel> PageInfo = ใหม่ PageInfo <AlmarmParammodel> (รายการ); dataGrid dataGrid = ใหม่ dataGrid (pageinfo.getTotal (), pageinfo.getList ()); ส่งคืน DataGrid; -8. ฉันสังเกตเห็นว่าฉันใช้คลาส DataGrid ที่นี่ซึ่งเป็นคลาสที่ใช้ส่งผ่านข้อมูลไปยังแผนกต้อนรับรวมถึงทั้งหมด (ทั้งหมด) และแถว (ข้อมูล)
ชั้นเรียนสาธารณะ DataGrid {รวมส่วนตัวทั้งหมด; แถวรายการส่วนตัว = arrayList ใหม่ <> (); Public DataGrid () {super (); } Public DataGrid (ยาวทั้งหมด, แถวรายการ) {super (); this.total = ทั้งหมด; this.rows = แถว; } สาธารณะยาว getTotal () {ผลตอบแทนทั้งหมด; } โมฆะสาธารณะ settotal (รวมยาว) {this.total = total; } รายการสาธารณะ getRows () {แถวกลับ; } โมฆะสาธารณะ setrows (แถวรายการ) {this.rows = rows; -9. เริ่มเขียนเลเยอร์คอนโทรลเลอร์และเรียกวิธีที่ฉันเขียนไว้ก่อนหน้านี้
ควรสังเกตที่นี่ว่าการชดเชยและขีด จำกัด คือหมายเลขหน้าที่ส่งจากแผนกต้อนรับและจำนวนหน้าที่แสดงต่อหน้า แตกต่างจากการชดเชยและขีด จำกัด ของ bootstraptable, ออฟเซ็ตแสดงถึงการชดเชยนั่นคือถ้าข้อมูล 10 ชิ้นแสดงต่อหน้าหน้าชดเชยที่แสดงโดยหน้าสองใน bootstrap คือ 10 และหน้าแรกและหน้าสามคือ 0 และ 20 ตามลำดับ และการชดเชยของฉันที่นี่หมายถึง pagenum
@RequestMapping (value = "/AlarmInfo/list", method = {requestMethod.get, requestMethod.post}) @ResponseBody Public DataGrid AlarmInfo (AlarmParammodel Model, @requestParam (value = "Offset", defaultValue = "0" @RequestParam (value = "limit", defaultValue = "10", จำเป็น = false) จำนวนเต็มหน้า) {dataGrid dataGrid = this.alarmmgrservice.selectalllist (โมเดล, pagenum, หน้า); ส่งคืน DataGrid; -10. ตอนนี้คำขอแผนกต้อนรับจะได้รับข้อมูลแบ็กเอนด์และแบ่งส่วนมัน ฉันจะโพสต์การกำหนดค่าของตาราง bootstrap แผนกต้อนรับของฉัน
$ ('#tb_departments'). bootstraptable ({url: 'http://10.1.234.134:8088/api/alarminfo/list', // การร้องขอ crache // ทั่วไปคุณสมบัตินี้จะต้องตั้งค่า (*) การแบ่งแยก: จริงหรือไม่ว่าจะแสดงการเพจ (*) OnlyInfopagination: จริง, // ตั้งค่าเป็นจริงเพื่อแสดงเฉพาะจำนวนข้อมูลทั้งหมดไม่ใช่ปุ่ม pagination SidePagination: "เซิร์ฟเวอร์", // วิธีการ pagination: ไคลเอ็นต์ไคลเอนต์การแบ่งแยกไคลเอนต์, เซิร์ฟเวอร์เซิร์ฟเวอร์ pagination (*) pagenumber: 1, // เริ่มต้นหน้าแรกที่จะโหลด, หน้าแรกเริ่มต้นหน้า: 10, // จำนวนของแถวบันทึกต่อหน้า ไม่เข้าสู่เซิร์ฟเวอร์ดังนั้นโดยส่วนตัวแล้วฉันรู้สึกว่ามันมีความสำคัญเพียงเล็กน้อยต่อการค้นหาอย่างเข้มงวด: จริง, showcolumns: false, // คอลัมน์ทั้งหมดจะแสดง showrefresh: false, // การรีเฟรชปุ่มแสดงขั้นต่ำ columns: 2, // ความสูงของคอลัมน์ ไม่ได้ตั้งค่าแอตทริบิวต์ตารางจะรู้สึกถึงความสูงของตารางโดยอัตโนมัติตามจำนวนระเบียนที่ไม่ซ้ำกัน: "id", // การระบุที่ไม่ซ้ำกันของแต่ละแถวโดยทั่วไปคือคอลัมน์คีย์หลัก showtoggle: FALSE, // ทำปุ่มสลับสำหรับมุมมองรายละเอียด PaginationDetailHalign: "ถูกต้อง" ฉันไม่ได้ใช้ปุ่มเพจที่มาพร้อมกับ bootstrap ฉันเขียนกลุ่มปุ่มด้วยตัวเองใน JQ ในบทความถัดไปฉันจะโพสต์รหัสปุ่มเพื่อให้สามารถปรับแต่งให้มีระดับที่สูงขึ้น ~ คุณสามารถใช้ปุ่มเพจพร้อมกับ bootstraptable sub-band และเพียงแค่เปลี่ยนการกำหนดค่า
ข้างต้นเป็นคำอธิบายโดยละเอียดของ SpringMVC+MyBatis+PageHelper Pagination แนะนำให้คุณรู้จักโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!