我的數(shù)據(jù)庫設(shè)計(jì)是一張老師表teacher,一張學(xué)生表student,一個(gè)教師對(duì)應(yīng)多個(gè)學(xué)生,在學(xué)生一方建立外鍵;
還有一點(diǎn)想清楚,需要展示的數(shù)據(jù)是根據(jù)什么來的,是成功登陸的用戶的id?還是直接展示所有的學(xué)生?
student表
教師表:
我是習(xí)慣性的從后寫到前,這里展示的是登錄成功的老師下的學(xué)生信息
1 建立項(xiàng)目,建立好對(duì)應(yīng)的包以及工具包
?
2建立好與數(shù)據(jù)庫對(duì)應(yīng)的實(shí)體類?
package com.zr.model; public class Student { private int sid; private String sname; private String sage; //自行g(shù)et set public Student() { super(); } public Student(int sid, String sname, String sage) { super(); this.sid = sid; this.sname = sname; this.sage = sage; } }
package com.zr.model; public class Teacher { private int tid; private String tname; private String tpsw; //自行g(shù)et set public Teacher(String tname, String tpsw) { super(); this.tname = tname; this.tpsw = tpsw; } public Teacher(int tid, String tname, String tpsw) { super(); this.tid = tid; this.tname = tname; this.tpsw = tpsw; } public Teacher() { super(); } }
3 StudentDao.java,因?yàn)槭褂玫氖莈asyUI,所以傳入?yún)?shù)多了起始頁碼start和頁面容量pageSize,這兩個(gè)參數(shù)都是從頁面的datagrid獲取的,是datagrid自帶的參數(shù),方便后面的分頁
package com.zr.dao; import java.util.List; import com.zr.model.Student; public interface StudentDao { /** * * @param tid * @return 學(xué)生對(duì)象 * 根據(jù)老師id返回學(xué)生對(duì)象 */ public List<Student> getStudentBytid(int tid,int start,int pageSize); /** * 根據(jù)學(xué)生id刪除學(xué)生 * @param s * @return */ public boolean deleteStudentsBysid(String s[]); /** * 根據(jù)學(xué)生id更新學(xué)生信息 * @param student * @return */ public boolean updateStudentBysid(int sid, String sname,String sage); /** * 根據(jù)當(dāng)前老師id添加學(xué)生 */ public boolean addStudent(String sname,String sage,int tid); /** * @param tid傳入老師ID * @return 返回學(xué)生總數(shù) */ public int getScountStudentByTid(int tid); }
4 StudentDaoImpl.java實(shí)現(xiàn)studentDao.java
package com.zr.daoIm; 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 JDBCUtil.JDBCUtil; import com.zr.dao.StudentDao; import com.zr.model.Student; public class StudentDaoImpl implements StudentDao{ /** * 根據(jù)傳入的老師id獲取學(xué)生 */ public List<Student> getStudentBytid(int tid,int start,int pageSize) { //定義學(xué)生對(duì)象集合students接收數(shù)據(jù)庫返回 List<Student> students = new ArrayList<Student>(); //獲取數(shù)據(jù)庫連接 Connection con=JDBCUtil.getConnection(); //編寫SQL語句 StringBuffer sql=new StringBuffer("select sid,sname,sage from student where tid=? limit ?,?"); try { PreparedStatement pst=con.prepareStatement(sql.toString()); pst.setInt(1, tid); pst.setInt(2, start); pst.setInt(3, pageSize); //返回一個(gè)結(jié)果集 ResultSet rs=pst.executeQuery(); while (rs.next()) { //學(xué)生對(duì)象接收結(jié)果集的結(jié)果 Student s=new Student(); s.setSid(rs.getInt("sid")); s.setSname(rs.getString("sname")); s.setSage(rs.getString("sage")); students.add(s); } } catch (SQLException e) { e.printStackTrace(); } return students; } @Override public int getScountStudentByTid(int tid) { int scounts=0; StringBuffer sql=new StringBuffer("select count(sid) scount from student where tid=?"); Connection con=JDBCUtil.getConnection(); try { PreparedStatement pst=con.prepareStatement(sql.toString()); pst.setInt(1, tid); ResultSet rs=pst.executeQuery(); while(rs.next()){ scounts=rs.getInt("scount"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return scounts; } }
5 service層:searchService.java以及實(shí)現(xiàn)層searchServiceImpl.java
package com.zr.service; import java.util.List; import com.zr.model.Student; public interface searchService { /** * 查詢服務(wù) * @param tid 通過老師ID * @return 學(xué)生對(duì)象所有信息 */ public List<Student> getStudents(int tid,int start,int pageSize); /** * * @param tid傳入老師ID * @return 返回學(xué)生總數(shù) */ public int getScountStudentByTid(int tid); }
package com.zr.serviceIm; import java.util.ArrayList; import java.util.List; import com.zr.dao.StudentDao; import com.zr.dao.TeacherDao; import com.zr.daoIm.StudentDaoImpl; import com.zr.daoIm.TeacherDaoImpl; import com.zr.model.Student; import com.zr.service.searchService; public class searchServiceImpl implements searchService{ public List<Student> getStudents(int tid,int start,int pageSize) { List<Student> students=new ArrayList<Student>(); StudentDao studentDaoImpl =new StudentDaoImpl(); students= studentDaoImpl.getStudentBytid(tid,start,pageSize); return students; } @Override public int getScountStudentByTid(int tid) { TeacherDao teacherDao =new TeacherDaoImpl(); return teacherDao.getScountStudentByTid(tid); } }
6 控制層com.zr.controller.SearchController.java
注:控制層涉及一個(gè)參數(shù)scount是當(dāng)前老師下的學(xué)生總數(shù)
import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.zr.model.Student; import com.zr.model.Teacher; import com.zr.service.searchService; import com.zr.serviceIm.searchServiceImpl; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class SearchController extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //設(shè)置字符編碼 req.setCharacterEncoding("utf8"); resp.setCharacterEncoding("utf8"); //實(shí)例化服務(wù)層,方便參數(shù)調(diào)用 searchService s=new searchServiceImpl(); //獲取datagrid的分頁參數(shù)page當(dāng)前頁碼和頁面容量rows,保持參數(shù)名一直 int page=Integer.parseInt(req.getParameter("page")); int rows=Integer.parseInt(req.getParameter("rows")); //用學(xué)生集合接收返回的數(shù)據(jù) List<Student> students=new ArrayList<Student>(); //起始頁碼start=當(dāng)前頁碼減1乘以頁面容量 int start= (page-1)*rows; //獲取存放在session中的teacher對(duì)象,在登錄的時(shí)候返回老師對(duì)象并存入session對(duì)象 Teacher teacher=(Teacher) req.getSession().getAttribute("teacher"); //獲取老師ID int tid= teacher.getTid(); int scount =s.getScountStudentByTid(tid); //根據(jù)老師id獲取學(xué)生對(duì)象 students= s.getStudents(tid, start, rows); //easy前臺(tái)接收的是json對(duì)象JSONObject JSONObject jso=new JSONObject(); //將數(shù)據(jù)返回給datagrid jso.put("total",scount); //rows后邊的參數(shù)代表需要在前臺(tái)顯示的數(shù)據(jù),格式為json的集合,再放入json的對(duì)象中 jso.put("rows", JSONArray.fromObject(students)); jso.put("page", start); resp.getWriter().write(jso.toString()); } }
7 前臺(tái)頁面編寫main.jsp
數(shù)據(jù)展示并不需要進(jìn)行過多的配置,只需要配置好對(duì)應(yīng)的列名以及請(qǐng)求參數(shù),數(shù)據(jù)格式,本頁面前臺(tái)的配置包含整個(gè)數(shù)據(jù)的增加,刪除,修改
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link href="${pageContext.request.contextPath}/themes/bootstrap/easyui.css" rel="stylesheet"> <link href="${pageContext.request.contextPath}/themes/icon.css" rel="stylesheet"> <script src="${pageContext.request.contextPath}/js/jquery.min.js"></script> <script src="${pageContext.request.contextPath}/js/jquery.easyui.min.js"></script> <script src="${pageContext.request.contextPath}/js/easyui-lang-zh_CN.js"></script> <title>login</title> <script type="text/javascript"> $(function(){ //將增加框和修改框進(jìn)行隱藏 $('#updateStu').dialog('close'); $('#addStu').dialog('close'); //配置學(xué)生信息表格 $('#students').datagrid({ url:'${pageContext.request.contextPath}/selectStus', columns:[[ {field:'checked',checkbox:true,width:100}, {field:'sid',title:'ID',width:100}, {field:'sname',title:'姓名',width:100}, {field:'sage',title:'年齡',width:100,align:'right'} ]], pagination : true, //顯示分頁 pagePosition:'bottom',//分頁顯示在底部 toolbar: [{ iconCls: 'icon-edit', text:'添加', handler: function(){ $('#addStu').dialog('open');//點(diǎn)擊添加按鈕顯示添加框 } },'-',{ iconCls: 'icon-delete', text:'刪除', handler: function(){ var sids=''; var ss=$("#students").datagrid('getSelections');//接收選中的對(duì)象結(jié)果集 if(ss.length==0){//對(duì)選中的大小判斷 $.messager.alert('這是一個(gè)提示信息!','請(qǐng)至少選擇一條數(shù)據(jù)進(jìn)行刪除!'); }else{ //對(duì)選中數(shù)據(jù)的id以逗號(hào)進(jìn)行拼接,結(jié)果會(huì)多一個(gè)逗號(hào),后臺(tái)再進(jìn)行處理:截取字符串 $.messager.confirm('提示', '確認(rèn)刪除?', function(r) { $.each(ss,function(n,v){ sids=sids+v.sid+',' }); $.ajax({ type:'post', url:'${pageContext.request.contextPath}/deleteStus', data:{'sids':sids}, dataType:"text", success:function(data){ if(data=="1"){ $.messager.alert('提示','刪除成功!'); $("#students").datagrid('reload'); }else{ $.messager.confirm('刪除失敗!',"刪除數(shù)據(jù)失敗!"); } } }) }); } } },'-',{ iconCls: 'icon-update', text:'修改', handler: function(){ var stus = $("#students").datagrid('getSelections'); if (stus.length != 1) { $.messager.confirm('提示', '請(qǐng)選擇一條數(shù)據(jù)', function(r){ $("#students").datagrid('unselectAll'); }) } else { //顯示修改框 $('#updateStu').dialog('open'); //將選中的數(shù)據(jù)加載到修改面板上 var stu = stus[0]; $('#upStu').form('load',stu); } } }] }); /* 配置添加框 */ $("#addStuf").form({ type:'post', url:'${pageContext.request.contextPath}/AddStu', dataType:"text", success : function(data) { if(data=="1"){ $('#addStu').dialog('close'); $('#addStuf').form('clear'); $.messager.alert('我的消息','添加商品信息成功','info',function(){ $('#students').datagrid('reload'); }); }else{ $.messager.alert('我的消息','添加商品信息失敗,重新添加','info',function(){ $("#addStuf").form('clear'); }); } } }); /* 配置修改框 */ $("#upStu").form({ type:'post', url:'${pageContext.request.contextPath}/updataStu', dataType:"text", success : function(data) { if(data=="1"){ $("#students").datagrid('reload'); $.messager.alert('提示!','修改成功'); $('#updateStu').dialog('close'); }else{ $.messager.alert('我的消息','修改學(xué)生信息失敗!','修改失敗!',function(){ $('#upStu').form('clear'); }); } } }); <!--配置搜索框,該功能尚未實(shí)現(xiàn)--> $('#searchStu').searchbox({ searcher : function(value, name) { var sname = value; $('#goods').datagrid('reload', { searchname : sname, }); } }); }); //配置修改學(xué)生信息表單提交 function updataForm() { $("#upStu").form('submit'); } function addForm() { $("#addStuf").form('submit'); } </script> </head> <body> <input id="searchStu" class="easyui-searchbox" data-options="prompt:'輸入學(xué)生查詢信息',width:150"> <table id="students"></table> <!-- 配置修改框面板 --> <div id="updateStu" class="easyui-dialog" title="更新學(xué)生信息信息" style="width: 400px; height: 450px;" data-options="modal:true"> <form id="upStu" method="post"> //id默認(rèn)隱藏,這樣就不允許修改 <div style="margin-bottom: 20px;"> <span>id</span> <input class="easyui-textbox" name="sid" id="sid" style="width: 200px;display: none;"> </div> <div style="margin-bottom: 20px"> <span>學(xué)生姓名</span> <input class="easyui-textbox" name="sname" style="width: 200px"> </div> <div style="margin-bottom: 20px"> <span>學(xué)生年齡</span> <input class="easyui-textbox" name="sage" style="width: 200px"> </div> </form> <div style="text-align: center; padding: 5px 0;"> <a href="javascript:void(0)" class="easyui-linkbutton" onclick="updataForm()" style="width: 80px" id="tt">提交</a> </div> </div> <!-- 配置增加框 --> <div id="addStu" class="easyui-dialog" title="添加學(xué)生信息信息" style="width: 400px; height: 450px;" data-options="modal:true"> <form id="addStuf" method="post"> <!-- <div style="margin-bottom: 20px;display: none;"> <span>學(xué)生ID</span> <input class="easyui-textbox" name="sid" style="width: 200px;"> </div> --> <div style="margin-bottom: 20px"> <span>學(xué)生姓名</span> <input class="easyui-textbox" name="sname" style="width: 200px"> </div> <div style="margin-bottom: 20px"> <span> 學(xué)生年齡</span> <input class="easyui-textbox" name="sage"> </div> </form> <div style="text-align: center; padding: 5px 0;"> <a href="javascript:void(0)" class="easyui-linkbutton" onclick="addForm()" style="width: 80px" id="tt">提交</a> </div> </div> </body> </html>
最后配置請(qǐng)求文件
<!-- 查詢當(dāng)前下面的學(xué)生信息 --> <servlet> <servlet-name>selectStus</servlet-name> <servlet-class>com.zr.controller.SearchController</servlet-class> </servlet> <servlet-mapping> <servlet-name>selectStus</servlet-name> <url-pattern>/selectStus</url-pattern> </servlet-mapping>
最后數(shù)據(jù)展示:
總結(jié):利用easyUI進(jìn)行數(shù)據(jù)展示的時(shí)候,自帶的參數(shù)page,rows是需要獲取的,并以此來實(shí)現(xiàn)分頁功能;
后臺(tái)返回到前臺(tái)的時(shí)候,需要返回三個(gè)參數(shù):
page: int?page=Integer.parseInt(req.getParameter("page")); ??int start= (page-1)*rows;?? jso.put("page", start);
rows是需要展示的數(shù)據(jù)json集合?jso.put("rows", JSONArray.fromObject(students));
第三個(gè)需要返回的是數(shù)據(jù)總數(shù)total:jso.put("total",scount);

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

引言在當(dāng)今快速發(fā)展的數(shù)位世界中,建立健壯、靈活且可維護(hù)的WEB應(yīng)用程式至關(guān)重要。 PHPmvc架構(gòu)提供了實(shí)現(xiàn)這一目標(biāo)的理想解決方案。 MVC(模型-視圖-控制器)是一種廣泛使用的設(shè)計(jì)模式,可將應(yīng)用程式的各個(gè)方面分離為獨(dú)立的元件。 MVC架構(gòu)的基礎(chǔ)MVC架構(gòu)的核心原理是分離關(guān)注點(diǎn):模型:封裝應(yīng)用程式的資料和業(yè)務(wù)邏輯。視圖:負(fù)責(zé)呈現(xiàn)資料並處理使用者互動(dòng)??刂破鳎簠f(xié)調(diào)模型和視圖之間的交互,管理使用者請(qǐng)求和業(yè)務(wù)邏輯。 PHPMVC架構(gòu)phpMVC架構(gòu)遵循傳統(tǒng)MVC模式,但也引進(jìn)了語言特定的功能。以下是PHPMVC

mvc架構(gòu)(模型-視圖-控制器)是PHP開發(fā)中最受歡迎的模式之一,因?yàn)樗鼮榻M織程式碼和簡化WEB應(yīng)用程式的開發(fā)提供了清晰的結(jié)構(gòu)。雖然基本的MVC原理對(duì)於大多數(shù)Web應(yīng)用程式來說已經(jīng)足夠,但對(duì)於需要處理複雜資料或?qū)崿F(xiàn)高級(jí)功能的應(yīng)用程序,它存在一些限制。分離模型層分離模型層是高階MVC架構(gòu)常見的技術(shù)。它涉及將模型類分解為較小的子類,每個(gè)子類專注於特定功能。例如,對(duì)於一個(gè)電子商務(wù)應(yīng)用程序,您可以將主模型類別分解為訂單模型、產(chǎn)品模型和客戶模型。這種分離有助於提高程式碼的可維護(hù)性和可重複使用性。使用依賴注入依賴

SpringMVC框架解密:為什麼它如此受歡迎,需要具體程式碼範(fàn)例引言:在當(dāng)今的軟體開發(fā)領(lǐng)域中,SpringMVC框架已經(jīng)成為開發(fā)者非常喜愛的一種選擇。它是基於MVC架構(gòu)模式的Web框架,提供了靈活、輕量、高效的開發(fā)方式。本文將深入探討SpringMVC框架的魅力所在,並透過具體的程式碼範(fàn)例來展示其強(qiáng)大之處。一、SpringMVC框架的優(yōu)勢(shì)靈活的配置方式Spr

MVC(Model-View-Controller)模式是一種常用的軟體設(shè)計(jì)模式,可以幫助開發(fā)人員更好地組織和管理程式碼。 MVC模式將應(yīng)用程式分為三個(gè)部分:模型(Model)、視圖(View)和控制器(Controller),每個(gè)部分都有自己的角色和職責(zé)。在本文中,我們將討論如何使用PHP實(shí)作MVC模式。模型(Model)模型代表應(yīng)用程式的資料和資料處理。通常,

在Web開發(fā)中,MVC(Model-View-Controller)是一種常用的架構(gòu)模式,用於處理和管理應(yīng)用程式的資料、使用者介面和控制邏輯。 PHP作為流行的Web開發(fā)語言,也可以藉助MVC架構(gòu)設(shè)計(jì)和建構(gòu)Web應(yīng)用程式。本文將介紹如何在PHP中使用MVC架構(gòu)設(shè)計(jì)項(xiàng)目,並說明其優(yōu)點(diǎn)和注意事項(xiàng)。什麼是MVCMVC是一種軟體架構(gòu)模式,通常用於Web應(yīng)用程式中。 MV

如何在PHP8框架中實(shí)現(xiàn)可擴(kuò)展的MVC架構(gòu)引言:隨著互聯(lián)網(wǎng)的快速發(fā)展,越來越多的網(wǎng)站和應(yīng)用程式採用了MVC(Model-View-Controller)架構(gòu)模式。 MVC架構(gòu)的主要目標(biāo)是將應(yīng)用程式的不同部分分開,以便提高程式碼的可維護(hù)性和可擴(kuò)展性。在本文中,我們將介紹如何在PHP8框架中實(shí)現(xiàn)可擴(kuò)充的MVC架構(gòu)。一、了解MVC架構(gòu)模式MVC架構(gòu)模式是一種軟體設(shè)

PHP8框架開發(fā)MVC:初學(xué)者需要知道的重要概念和技巧引言:隨著網(wǎng)路的快速發(fā)展,Web開發(fā)在當(dāng)今的軟體開發(fā)產(chǎn)業(yè)中扮演著重要的角色。 PHP被廣泛用於Web開發(fā),並且有許多成熟的框架可以幫助開發(fā)人員更有效率地建立應(yīng)用程式。其中,MVC(Model-View-Controller)架構(gòu)是最常見且廣泛使用的模式之一。本文將介紹初學(xué)者在使用PHP8框架開發(fā)MVC應(yīng)用程

模型-視圖-控制器(mvc)架構(gòu)是一種強(qiáng)大的設(shè)計(jì)模式,用於建立可維護(hù)且可擴(kuò)展的WEB應(yīng)用程式。 PHPMVC架構(gòu)將應(yīng)用程式邏輯分解為三個(gè)不同的元件:模型:表示應(yīng)用程式中的資料和業(yè)務(wù)邏輯。視圖:負(fù)責(zé)呈現(xiàn)資料給使用者??刂破鳎撼洚?dāng)模型和視圖之間的橋樑,處理使用者請(qǐng)求並協(xié)調(diào)其他元件。 MVC架構(gòu)的優(yōu)點(diǎn):程式碼分離:MVC將應(yīng)用程式邏輯與表示層分離,提高了可維護(hù)性和可擴(kuò)充性??芍匮}使用性:視圖和模型元件可以跨不同的應(yīng)用程式重複使用,減少重複程式碼。效能優(yōu)化:MVC架構(gòu)允許快取視圖和模型結(jié)果,從而提高網(wǎng)站速度。測(cè)試友善:分離
