日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中部的分页实现(二)

發(fā)布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中部的分页实现(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

大家好,歡迎來到雄雄的小課堂,昨天分享了關(guān)于分頁查詢的理論知識,今天我們就來結(jié)合代碼和案例實際的應(yīng)用一下,方便大家理解。

前言:我們都知道,實現(xiàn)分頁需要三個步驟。第一,確定頁大小(每頁顯示的數(shù)據(jù)量)。第二,計算顯示的總頁數(shù)。第三,寫分頁的sql語句。這三步已經(jīng)在昨天的推文中詳細(xì)說明,需要的可以點擊這里快速瀏覽:javaweb中實現(xiàn)分頁,持續(xù)更新……

01

開發(fā)環(huán)境

Myeclipse 10.5

Mysql 5.5

Tomcat 7.0

JDK 1.7

Chrome瀏覽器

02

數(shù)據(jù)庫和表結(jié)構(gòu):

下面是表中的測試數(shù)據(jù),需要說明的是saddress這一列,本來是當(dāng)做地址的,現(xiàn)在有其他的需求,就當(dāng)成了角色使用,但是并不影響分頁。

03

Javaweb代碼

Java代碼是以分層開發(fā)的思想來實現(xiàn)的,其中有實體類:Student,Dao類和接口:BaseDaoNew,IStudentDao,Dao層實現(xiàn)類StudentDaoImpl:Service接口和實現(xiàn)類IStudentService,StudentService以及最后的工具類PageUtils

代碼如下

實體類:Student

package?org.entity;/*** * @author?24519* 學(xué)生的實體類**/ public?class?Student?{private???int?????sid;private???String sname;private???String sphone;private???String spass;private???String saddress;private???int?????sage;//封裝public?int?getSid()?{return?sid;}public?void?setSid(int?sid)?{this.sid = sid;}public?String getSname()?{return?sname;}public?void?setSname(String sname)?{this.sname = sname;}public?String getSphone()?{return?sphone;}public?void?setSphone(String sphone)?{this.sphone = sphone;}public?String getSpass()?{return?spass;}public?void?setSpass(String spass)?{this.spass = spass;}public?String getSaddress()?{return?saddress;}public?void?setSaddress(String saddress)?{this.saddress = saddress;}public?int?getSage()?{return?sage;}public?void?setSage(int?sage)?{this.sage = sage;}}

BaseDaoNew:

package org.dao;import java.sql.*; import java.util.List;import com.sun.org.glassfish.external.statistics.annotations.Reset;/*** * @author 24519* 連接數(shù)據(jù)庫的工作類**/ public??class?BaseDaoNew?{private?Connection conn = null;private?PreparedStatement pre;private?ResultSet rs;//連接數(shù)據(jù)庫public?Connection getConn(){try{//加載驅(qū)動Class.forName("com.mysql.jdbc.Driver");//數(shù)據(jù)庫連接字符串String url= "jdbc:mysql://localhost:3306/schooldb?user=root&password=root";//連接數(shù)據(jù)庫conn = DriverManager.getConnection(url);}catch(Exception ex){ex.printStackTrace();}return?conn;}//增刪改public?int?ExecuteUpdate(String sql,List params) throws SQLException{int?rel = 0;conn = getConn();pre = conn.prepareStatement(sql);if(params!=null){for(int?i = 0;i<params.size();i++){pre.setObject(i+1, params.get(i));}}rel = pre.executeUpdate();return?rel;}//查詢public?ResultSet ExecuteQuerty(String sql,List params) throws SQLException{conn = getConn();pre = conn.prepareStatement(sql);if(params!=null){for(int?i = 0;i<params.size();i++){pre.setObject(i+1, params.get(i));}}return?pre.executeQuery();}//關(guān)閉連接public?void?closeConn(Connection conn,PreparedStatement pre,ResultSet rs){try?{if(rs!=null){rs.close();}if(pre!=null){pre.close();}if(conn!=null){conn.close();}} catch?(SQLException e) {e.printStackTrace();}}}

IStudentDao:

package?org.dao;import?java.util.List;import?org.entity.Student;//學(xué)生信息的接口 public?interface?IStudentDao?{//增加學(xué)生信息public?int?addStudent(Student stu);//修改學(xué)生信息public?int?updateStudent(Student stu);//刪除學(xué)生信息public?int?delStudent(int?sid);//根據(jù)編號查詢學(xué)生信息public?Student findStudentById(int?sid);//查詢?nèi)繉W(xué)生信息public?List<Student> findStudentAll();//登錄public?Student login(String name,String pass);//總記錄數(shù)public?int?findAllStudentCount();//分頁查詢public?List<Student> findStudentByPage(int?currIndex,int?pageSize); }

StudentDaoImpl:

package org.dao.impl;import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;import org.dao.BaseDao; import org.dao.BaseDaoNew; import org.dao.IStudentDao; import org.entity.Student;import com.sun.xml.internal.ws.Closeable;/*** * @author 24519* 學(xué)生信息的實現(xiàn)類**/ public?class?StudentDaoImpl?implements?IStudentDao?{BaseDao base?= new?BaseDao();private?Connection conn = base.getConn();PreparedStatement pre = null;ResultSet rs = null;@Overridepublic?int?addStudent(Student stu) {int?rel = 0;String sql = "insert into Student values(?,?,?,?,?,?);";try?{List<Object> params?= new?ArrayList<Object>();params.add(stu.getSid());params.add(stu.getSname());params.add(stu.getSphone());params.add(stu.getSpass());params.add(stu.getSaddress());params.add(stu.getSage());rel = base.ExecuteUpdate(sql, params);} catch?(SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return?rel;}@Overridepublic?int?updateStudent(Student stu) {String sql = "update student set sname = ?,"?+"sphone = ?,spass=?,saddress=?,sage=? where sid = ?";int?rel = 0;try?{List<Object> params?= new?ArrayList<Object>();params.add(stu.getSname());params.add(stu.getSphone());params.add(stu.getSpass());params.add(stu.getSaddress());params.add(stu.getSage());params.add(stu.getSid());rel = base.ExecuteUpdate(sql, params);} catch?(SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return?rel;}@Overridepublic?int?delStudent(int?sid) {String sql = "delete from Student where sid = ?";int?rel = 0;try?{List<Object> params?= new?ArrayList<Object>();params.add(sid);rel = base.ExecuteUpdate(sql, params);} catch?(SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return?rel;}@Overridepublic?Student findStudentById(int?sid) {Student student = new?Student();String sql = "select * from student where sid = ?";try?{List<Object> params?= new?ArrayList<Object>();params.add(sid);rs = base.ExecuteQuery(sql, params);while(rs.next()){student.setSid(rs.getInt(1));student.setSname(rs.getString(2));student.setSphone(rs.getString(3));student.setSpass(rs.getString(4));student.setSaddress(rs.getString("saddress"));student.setSage(rs.getInt(6));}} catch?(SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return?student;}@Overridepublic?List<Student> findStudentAll() {List<Student> stus = new?ArrayList<Student>();String sql = "select * from Student";try?{rs = base.ExecuteQuery(sql, null);while(rs.next()){Student student = new?Student();student.setSid(rs.getInt(1));student.setSname(rs.getString(2));student.setSphone(rs.getString(3));student.setSpass(rs.getString(4));student.setSaddress(rs.getString(5));student.setSage(rs.getInt(6));stus.add(student);//將信息放入集合中}} catch?(SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return?stus;}//登陸@Overridepublic?Student login(String name, String pass) {Student student = new?Student();String sql = "select * from student where sname = ? and spass = ?;";try?{List<Object> params?= new?ArrayList<Object>();params.add(name);params.add(pass);rs = base.ExecuteQuery(sql, params);while(rs.next()){student.setSid(rs.getInt(1));student.setSname(rs.getString(2));student.setSphone(rs.getString(3));student.setSpass(rs.getString(4));student.setSaddress(rs.getString(5));student.setSage(rs.getInt(6));}} catch?(SQLException e) {e.printStackTrace();}return?student;}//查詢總記錄數(shù)@Overridepublic?int?findAllStudentCount() {String sql = "select count(*) from student";int?count = 0;try?{rs = base.ExecuteQuery(sql, null);rs.next();count = rs.getInt(1);} catch?(SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return?count;}//分頁查詢@Overridepublic?List<Student> findStudentByPage(int?currIndex, int?pageSize) {String sql = "select * from student limit ? ,?";int?one = (currIndex-1)*pageSize;List<Object> params?= new?ArrayList<Object>();params.add(one);params.add(pageSize);List<Student> sList = new?ArrayList<Student>();try?{rs = base.ExecuteQuery(sql, params);while(rs.next()){Student stu = new?Student();stu.setSid(rs.getInt(1));stu.setSname(rs.getString(2));stu.setSphone(rs.getString(3));stu.setSpass(rs.getString(4));stu.setSaddress(rs.getString(5));stu.setSage(rs.getInt(6));sList.add(stu);}} catch?(SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return?sList;}}

IStudentService:

package?org.service;import?java.util.List;import?org.entity.Student;public?interface?IStudentService?{//增加學(xué)生信息public?int?addStudent(Student stu);//修改學(xué)生信息public?int?updateStudent(Student stu);//刪除學(xué)生信息public?int?delStudent(int?sid);//根據(jù)編號查詢學(xué)生信息public?Student findStudentById(int?sid);//查詢?nèi)繉W(xué)生信息public?List<Student> findStudentAll();//登錄public?Student login(String name,String pass);//計算總記錄數(shù)public?int?findAllStudentCount();//分頁查詢public?List<Student> findStudentByPage(int?currIndex,int?pageSize);}

StudentService:

package?org.service.impl;import?java.util.List;import?org.dao.IStudentDao; import?org.dao.impl.StudentDaoImpl; import?org.entity.Student; import?org.service.IStudentService;public?class?StudentServiceImpl?implements?IStudentService?{//創(chuàng)建Dao層的對象private?IStudentDao sDao = new?StudentDaoImpl();@Overridepublic?int?addStudent(Student stu)?{return?sDao.addStudent(stu);}@Overridepublic?int?updateStudent(Student stu)?{return?sDao.updateStudent(stu);}@Overridepublic?int?delStudent(int?sid)?{return?sDao.delStudent(sid);}@Overridepublic?Student findStudentById(int?sid)?{return?sDao.findStudentById(sid);}@Overridepublic?List<Student> findStudentAll()?{return?sDao.findStudentAll();}@Overridepublic?Student login(String name, String pass)?{return?sDao.login(name, pass);}@Overridepublic?int?findAllStudentCount()?{return?sDao.findAllStudentCount();}//分頁查詢@Overridepublic?List<Student> findStudentByPage(int?currIndex, int?pageSize)?{return?sDao.findStudentByPage(currIndex, pageSize);}}

PageUtils:

package?org.utils;import?java.util.List;import?org.entity.Student;/*** * @author?24519* 分頁的工具類**/ public?class?PageUtils?{//頁大小(每頁顯示多少條記錄)private?int?pageSize;//當(dāng)前頁private?int?currIndex;//總記錄數(shù)private?int?totalCount;//總頁數(shù)private?int?totalPage;//每頁顯示的數(shù)據(jù)List<Student> sList;public?int?getPageSize()?{return?pageSize;}public?void?setPageSize(int?pageSize)?{this.pageSize = pageSize;}public?int?getCurrIndex()?{return?currIndex;}//設(shè)置當(dāng)前頁public?void?setCurrIndex(int?currIndex)?{//判斷當(dāng)前頁是否小于0,如果是,則默認(rèn)第一頁if(currIndex<=0){this.currIndex = 1;}else{this.currIndex = currIndex;}}public?int?getTotalCount()?{return?totalCount;}//計算總頁數(shù)public?void?setTotalCount(int?totalCount)?{this.totalCount = totalCount;int?pages = totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;totalPage = pages;}public?int?getTotalPage()?{return?totalPage;}public?void?setTotalPage(int?totalPage)?{this.totalPage = totalPage;}public?List<Student> getsList()?{return?sList;}public?void?setsList(List<Student> sList)?{this.sList = sList;}}

代碼解析:我們可以看到,在IStudentDao中,除了有增刪改和登錄的接口外,還有兩個接口,一個是查詢總記錄數(shù),另一個為分頁查詢數(shù)據(jù).

//總記錄數(shù)public?int?findAllStudentCount();//分頁查詢public?List<Student> findStudentByPage(int?currIndex,int?pageSize);

總記錄數(shù)的作用就是對總頁數(shù)進(jìn)行計算,公式為,總頁數(shù)=總記錄數(shù)%頁大小==0?總記錄數(shù)/頁大小:總記錄數(shù)/頁大小+1;

分頁查詢的數(shù)據(jù),由于是多條,即返回List<Student>集合,每頁顯示5條數(shù)據(jù),那我們就查詢5條,即參數(shù)pageSize的值為5。currIndex的作用是用來記錄當(dāng)前頁。

實現(xiàn)類對于這兩個接口的關(guān)鍵代碼如下:

//查詢總記錄數(shù)@Overridepublic?int?findAllStudentCount() {String sql = "select count(*) from student";int?count = 0;try?{rs = base.ExecuteQuery(sql, null);rs.next();count = rs.getInt(1);} catch?(SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return?count;}//分頁查詢@Overridepublic?List<Student> findStudentByPage(int?currIndex, int?pageSize) {String sql = "select * from student limit ? ,?";int?one = (currIndex-1)*pageSize;List<Object> params?= new?ArrayList<Object>();params.add(one);params.add(pageSize);List<Student> sList = new?ArrayList<Student>();try?{rs = base.ExecuteQuery(sql, params);while(rs.next()){Student stu = new?Student();stu.setSid(rs.getInt(1));stu.setSname(rs.getString(2));stu.setSphone(rs.getString(3));stu.setSpass(rs.getString(4));stu.setSaddress(rs.getString(5));stu.setSage(rs.getInt(6));sList.add(stu);}} catch?(SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return?sList;}

PageUtils類的我們需要注意,在設(shè)置當(dāng)前頁currIndex的值時,要對齊進(jìn)行判斷,因為當(dāng)前頁永遠(yuǎn)永遠(yuǎn)的不可能小于0 或者大于總頁數(shù),設(shè)置的關(guān)鍵代碼如下:

//設(shè)置當(dāng)前頁public?void?setCurrIndex(int?currIndex)?{//判斷當(dāng)前頁是否小于0,如果是,則默認(rèn)第一頁if(currIndex<=0){this.currIndex = 1;}else{this.currIndex = currIndex;}}

設(shè)置總記錄數(shù)的關(guān)鍵代碼如下:順便對總頁數(shù)進(jìn)行計算

//計算總頁數(shù)public?void?setTotalCount(int?totalCount)?{this.totalCount = totalCount;int?pages = totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;totalPage = pages;}

接下來就可以在表現(xiàn)層進(jìn)行分頁,我們在進(jìn)分頁查詢的頁面之前,先進(jìn)doPage.jsp對數(shù)據(jù)進(jìn)行處理,將所有需要用到的分頁數(shù)據(jù)全部封裝至PageUtils類中,完整實現(xiàn)代碼如下:各個關(guān)鍵步驟均有注釋

<%@page?import="org.entity.Student"%> <%@page?import="org.service.impl.StudentServiceImpl"%> <%@page?import="org.service.IStudentService"%> <%@page?import="org.utils.PageUtils"%> <%@ page language="java"?import="java.util.*"?pageEncoding="UTF-8"%> <%Student stu = (Student) request.getAttribute("student");//判斷是否是管理員if?(stu.getSaddress().equals("管理員")) {//獲取當(dāng)前頁,//如果是空,默認(rèn)是1String?curr = request.getParameter("currIndex");if?(curr == null) {curr = "1";}Integer currIndex = Integer.parseInt(curr);PageUtils p = new?PageUtils();p.setPageSize(5);//計算總記錄數(shù)IStudentService s = new?StudentServiceImpl();//從數(shù)據(jù)庫中查詢總記錄數(shù)p.setTotalCount(s.findAllStudentCount());//如果當(dāng)前頁大于等于總頁數(shù),那當(dāng)前頁就是總頁數(shù)if?(currIndex >= p.getTotalPage()) {currIndex = p.getTotalPage();} else?if?(currIndex <= 0) {//如果當(dāng)前頁小于等于0,則當(dāng)前頁等于1currIndex = 1;}p.setCurrIndex(currIndex);//從數(shù)據(jù)庫中查詢每頁顯示的數(shù)據(jù)放在集合中List<Student> sList = s.findStudentByPage(currIndex, 5);p.setsList(sList);//將p對象放在request作用域中,在請求的頁面中獲取request.setAttribute("p", p);//跳轉(zhuǎn)到分頁的頁面request.getRequestDispatcher("findStudentPage.jsp").forward(request, response);} else?{//普通員工//跳轉(zhuǎn)到查詢自己信息的頁面request.setAttribute("stu", stu);request.getRequestDispatcher("shouInfo.jsp").forward(request,response);} %>

注意看這一行代碼,當(dāng)我們將一切處理完之后,通過這行代碼轉(zhuǎn)發(fā)至分頁顯示信息的頁面,

request.getRequestDispatcher("findStudentPage.jsp").forward(request, response);

下面就是分頁顯示數(shù)據(jù)的頁面了:

<%@page import="org.utils.PageUtils"%> <%@page import="org.entity.Student"%> <%@page import="org.service.impl.StudentServiceImpl"%> <%@page import="org.service.IStudentService"%> <%@ page language="java"?import="java.util.*"?pageEncoding="UTF-8"%> <% 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 'FindStudentPage.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><%//獲取所有的數(shù)據(jù)PageUtils p = (PageUtils)request.getAttribute("p");//從工具類中獲取每頁顯示的數(shù)據(jù)List<Student> sList =p.getsList() ;%><table border="1"><tr><td>編號</td><td>姓名</td><td>電話</td><td>密碼</td><td>地址</td><td>年齡</td></tr><%for(Student stu :sList){%><tr><td><%=stu.getSid() %></td><td><%=stu.getSname() %></td><td><%=stu.getSphone() %></td><td><%=stu.getSpass() %></td><td><%=stu.getSaddress()%></td><td><%=stu.getSage() %></td></tr><%}%> </table><a href="doPage.jsp?currIndex=1">首頁</a><a href="doPage.jsp?currIndex=<%=p.getCurrIndex()-1%>">上一頁</a><%=p.getCurrIndex()%> / <%=p.getTotalPage()%><a href="doPage.jsp?currIndex=<%=p.getCurrIndex()+1%>">下一頁</a><a href="doPage.jsp?currIndex=<%=p.getTotalPage()%>">末頁</a><br/><form action="doPage.jsp"?method="post">至<input type="number"?max="<%=p.getTotalPage() %>"?min="1"?value="<%=p.getCurrIndex() %>"?style="display:inline-block; width:50px"?name="currIndex"/>頁<input type="submit"?value="跳轉(zhuǎn)"></form></body> </html>

代碼解析:

先從request中獲取doPage.jsp中放入的數(shù)據(jù),然后以表格的形式展示出來。

04

翻頁解析

首頁,很簡單,當(dāng)前頁碼必定是1,所以直接寫currIndex=1即可。

上一頁,假如當(dāng)前也是2,那么上一頁就是當(dāng)前也減去1,所以上一頁就是currIndex-1。

下一頁,正好和上一頁相反,即currIndex+1。

尾頁,假如一共有5頁,那么尾頁就是5,即currIndex=5。

當(dāng)前頁和總頁數(shù)由于我們在doPage都放在了PageUtils中,所以直接從PageUtils中獲取即可。

注意我們無論是點擊上一頁還是下一頁,或者首頁尾頁,均是跳轉(zhuǎn)至doPage.jsp中操作,在doPage.jsp中,直接獲取currIndex的值,然后在調(diào)用Service里面的方法進(jìn)行分頁查詢。

運行結(jié)果如下:

往期精彩

javaweb中實現(xiàn)分頁,持續(xù)更新……

2020-11-24

一個簡單的分頁工具類

2020-11-23

javaWeb中,如何通過Commons-FileUpload組件上傳文件

2020-11-22

多功能語音播放器

2020-11-21

CSS動畫示例(上一篇是CSS過渡…)

2020-11-20

CSS3中的動畫示例

2020-11-19

點分享

點點贊

點在看

總結(jié)

以上是生活随笔為你收集整理的java中部的分页实现(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。