java webutil_JavaWeb -学生信息管理实践(JDBC+web+三层架构+DBUtil构造思路)

前言:

1 该程序使用动态web项目

2 该程序使用SQL server需导入

905134734b8b52e526a4a60a3809785f.png对应包( 具体可看前篇----JDBC的使用)

3 三层架构思想:

①表示层

前台:jsp/html等 作为前台与用户交互

后台:用于控制跳转,调用业务逻辑层

②业务逻辑层

将数据访问层进行组装

给表示层调用

③数据访问层

所有小功能和函数建立

与数据库相连 以dao命名

4 该程序体现面向接口开发:先接口-再实现类(此为规范!!)

当实体类需要实例时

运用:接口=new 实例

service、dao加入接口

命名规范:

接口:IXXX    例:IStudentDao

实现类:XXXImpl   例:StudentDaoImpl

5 DBUtil作为通用数据库工具类,实现通用调用数据库方法

6 该程序使用tomcat8.5

以下是示例目录

e339d1d672b2796eaadedbbdf5dfadd6.png

以下是代码实例

IStudentDao(作为dao的接口 将方法写出但不做声明)

packagedao;importjava.util.List;importentity.Student;public interfaceIStudentDao {public boolean isExist(intsno);public booleanAddStudent(Student student);public ListqueryAll();public boolean updateStudentBySno(intsno,Student student);public Student queryStudentBysno(intsno);public boolean deleteStudentBySno(intsno);

}

StudentDaoImpl(实现接口方法-增、删、改、查单人/查所有)

##用DBUtil封装方法 达到减少代码量目的

packagedaoImpl;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;importdao.IStudentDao;importentity.Student;importutil.DBUtil;/** 数据访问层

* 与数据库交互*/

public class StudentDaoImpl implementsIStudentDao {/** 判断学号是否存在

* 返回学号是否存在*/

public boolean isExist(intsno) {return queryStudentBysno(sno)==null?false:true;

}/** 增加学生信息

* 返回是否成功*/

public booleanAddStudent(Student student) {

String sql="insert into student values(?,?,?,?)";

Object[] params={student.getSno(),student.getSname(),student.getAge(),student.getAge(),student.getAddress()};returnDBUtil.executeUpdate(sql, params);

}/** 根据学号删人

* 返回是否成功*/

public boolean deleteStudentBySno(intsno) {

String sql="delete student where sno=?";

Object[] params={sno};returnDBUtil.executeUpdate(sql, params);

}/** 根据学号sno修改数据student

* 返回是否成功*/

public boolean updateStudentBySno(intsno,Student student) {

String sql="update student set sname=?,sage=?,saddress=? where sno=?";

Object[] params={student.getSname(),student.getAge(),student.getAddress(),sno};returnDBUtil.executeUpdate(sql, params);

}/** 查询全部学生

* 返回学生集合*/

public ListqueryAll() {

Student student=null;

PreparedStatement pst=null;

ResultSet rs=null;

List students=new ArrayList();try{

String sql="select * from student";

rs= DBUtil.executeQuery(sql, null);while(rs.next()) {int no=rs.getInt("sno");

String name=rs.getString("sname");int age=rs.getInt("sage");

String address=rs.getString("saddress");

student=newStudent(no,name,age,address);

students.add(student);

}returnstudents;

}catch(SQLException e) {

e.printStackTrace();return null;

}catch(Exception e) {

e.printStackTrace();return null;

}finally{try{if(rs!=null) rs.close();if(pst!=null) pst.close();if(DBUtil.connection!=null) DBUtil.connection.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

}/** 根据学号查询学生

* 返回查询学生类*/

public Student queryStudentBysno(intsno) {

Student student=null;

PreparedStatement pst=null;

ResultSet rs=null;try{

String sql="select * from student where sno=?";

Object params[]={sno};

rs=DBUtil.executeQuery(sql, params);if(rs.next()) {int no=rs.getInt("sno");

String name=rs.getString("sname");int age=rs.getInt("sage");

String address=rs.getString("saddress");

student=newStudent(no,name,age,address);

}returnstudent;

}catch(SQLException e) {

e.printStackTrace();return null;

}catch(Exception e) {

e.printStackTrace();return null;

}finally{

DBUtil.closeAll(rs, pst, DBUtil.connection);

}

}

}

DBUtil减少代码冗余-并实现 数据库通用工具类思想

packageutil;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;//通用的数据库操作方法

public classDBUtil {//sql数据库连接字符串

private static final String URL="jdbc:sqlserver://localhost:1433;databasename=javatest";//sql用户名 和密码 用作连接用

private static final String USERNAME="sa";private static final String PWD="cc123nice";public static Connection connection=null;public static PreparedStatement pst =null;public static ResultSet rs =null;/** 得到PreparedStatement减少代码冗余*/

public staticPreparedStatement getPreparedStatement(String sql,Object[] params) {//导入驱动,加载具体驱动类

try{

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//与数据库建立链接

connection =DriverManager.getConnection(URL, USERNAME, PWD);

pst=connection.prepareStatement(sql);if(params!=null) {for(int i=0;i

pst.setObject(i+1,params[i]);

}

}

}catch(ClassNotFoundException e) {

e.printStackTrace();

}catch(SQLException e) {

e.printStackTrace();

}returnpst;

}/** 最后关闭所有*/

public static voidcloseAll(ResultSet rs,Statement stmt,Connection connection) {try{if(rs!=null) rs.close();if(stmt!=null) stmt.close();if(connection!=null) connection.close();

}catch(SQLException e) {

e.printStackTrace();

}

}/** 通用的增删改 通过传入的sql和obj数组确认语句*/

public static booleanexecuteUpdate(String sql,Object[] params) {try{int count =getPreparedStatement(sql,params).executeUpdate();if(count>0)return true;else

return false;

}catch(SQLException e) {

e.printStackTrace();return false;

}catch(Exception e) {

e.printStackTrace();return false;

}finally{

closeAll(null, pst, connection);

}

}/** 通用的查询(只能返回到ResultSet)之后必须与具体类型耦合*/

public staticResultSet executeQuery(String sql,Object[] params) {try{

rs=getPreparedStatement(sql,params).executeQuery();returnrs;

}catch(SQLException e) {

e.printStackTrace();return null;

}catch(Exception e) {

e.printStackTrace();return null;

}

}

}

IStudentService(作为service的接口 将方法写出但不做声明)

packageservice;importjava.util.List;importentity.Student;public interfaceIStudentService {public booleanaddStudent(Student student);//删

public boolean deleteStudentBySno(intsno);//改

public boolean updateStudentBySno(intsno,Student student);//根据学号查

public Student queryStudentBysno(intsno) ;//查询所有

public ListqueryAll();

}

StudentServiceImpl实现接口IStudentService方法实现

主要对dao实例内的方法进行封装

packageserviceImpl;importjava.util.List;importdao.IStudentDao;importdaoImpl.StudentDaoImpl;importentity.Student;importservice.IStudentService;/** 业务逻辑层 对dao层进行组装 逻辑性增删改查(增删改==查+操作)*/

public class StudentServiceImpl implementsIStudentService{

IStudentDao std=newStudentDaoImpl();//增

public booleanaddStudent(Student student) {if(!std.isExist(student.getSno())){returnstd.AddStudent(student);

}else

return false;

}//删

public boolean deleteStudentBySno(intsno) {if(std.isExist(sno)){returnstd.deleteStudentBySno(sno);

}else

return false;

}//改

public boolean updateStudentBySno(intsno,Student student) {if(std.isExist(sno)){returnstd.updateStudentBySno(sno, student);

}else

return false;

}//根据学号查

public Student queryStudentBysno(intsno) {returnstd.queryStudentBysno(sno);

}//查询所有

public ListqueryAll(){returnstd.queryAll();

}

}

MyServerlet包中存放对各个方法的servlet(实现1对1的情况)将表示层的信息处理、向下-处理层传递/向上-表示层传递

AddServlet实现‘增加’的表示层后台

packageMyServerlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importentity.Student;importservice.IStudentService;importserviceImpl.StudentServiceImpl;/** serverlet--增加*/@WebServlet("/AddServerlet")public class AddServlet extendsHttpServlet {private static final long serialVersionUID = 1204432039484958110L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {try{int sno =Integer.parseInt( request.getParameter("sno"));

String name= request.getParameter("sname");int age = Integer.parseInt(request.getParameter("sage"));

String address= request.getParameter("saddress");

Student student=newStudent(sno,name,age,address);

IStudentService studentService= newStudentServiceImpl();boolean res =studentService.addStudent(student);

request.setCharacterEncoding("utf-8");//给request增加标识符

if(!res)

request.setAttribute("res", "增加失败");elserequest.setAttribute("res", "增加成功");

}catch(Exception e){

request.setAttribute("res", "数据有误增加失败");

}

request.getRequestDispatcher("QueryAllServlet").forward(request, response);

}protected void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

doGet(request, response);

}

}

DeleteServlet实现‘删除’的表示层后台

packageMyServerlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importservice.IStudentService;importserviceImpl.StudentServiceImpl;

@WebServlet("/DeleteServerlet")public class DeleteServlet extendsHttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//接受学号

int sno = Integer.parseInt(request.getParameter("sno"));

IStudentService service= newStudentServiceImpl();boolean res =service.deleteStudentBySno(sno);

response.setContentType("text/html; charset=utf-8");if(!res)

request.setAttribute("res", "删除失败");elserequest.setAttribute("res", "删除成功");

request.getRequestDispatcher("QueryAllServlet").forward(request, response);

}protected void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

doGet(request, response);

}

}

QueryAllServlet实现‘查找所有’的表示层后台

packageMyServerlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importservice.IStudentService;importserviceImpl.StudentServiceImpl;

@WebServlet("/DeleteServerlet")public class DeleteServlet extendsHttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//接受学号

int sno = Integer.parseInt(request.getParameter("sno"));

IStudentService service= newStudentServiceImpl();boolean res =service.deleteStudentBySno(sno);

response.setContentType("text/html; charset=utf-8");if(!res)

request.setAttribute("res", "删除失败");elserequest.setAttribute("res", "删除成功");

request.getRequestDispatcher("QueryAllServlet").forward(request, response);

}protected void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

doGet(request, response);

}

}

QuerySnoServlet实现‘通过学号查找’的表示层后台

此处重定向到studentinfo.jsp 以下进行解析

packageMyServerlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importentity.Student;importservice.IStudentService;importserviceImpl.StudentServiceImpl;

@WebServlet("/QuerySnoServerlet")public class QuerySnoServlet extendsHttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {int no = Integer.parseInt(request.getParameter("sno"));

IStudentService service= newStudentServiceImpl();

Student student=service.queryStudentBysno(no);

request.setAttribute("student", student);

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

}protected void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

doGet(request, response);

}

}

UpdateServlet实现‘修改’的表示层后台

packageMyServerlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importentity.Student;importservice.IStudentService;importserviceImpl.StudentServiceImpl;

@WebServlet("/UpdateServlet")public class UpdateServlet extendsHttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//处理获取数据编码

request.setCharacterEncoding("utf-8");//获取待修改学生的学号

int no = Integer.parseInt(request.getParameter("sno"));//修改后内容

String name = request.getParameter("sname");int age = Integer.parseInt(request.getParameter("sage"));

String address= request.getParameter("saddress");

Student student=newStudent(name,age,address);

IStudentService service= newStudentServiceImpl();boolean res =service.updateStudentBySno(no, student);//处理相应编码

response.setContentType("text/html; charset=utf-8");if(!res)

request.setAttribute("res", "修改失败");elserequest.setAttribute("res", "修改成功");

request.getRequestDispatcher("QueryAllServlet").forward(request, response);

}protected void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

doGet(request, response);

}

}

以下为表示层前台

add.jsp增加学生信息表单

新增用户信息

学号:
姓名:
年龄:
地址:

index.jsp 以表单显示所有学生基本信息

实现学号超链接更多信息

实现新增信息

实现删除信息

学生信息列表

Stringres=(String)request.getAttribute("res");if(res!=null){

out.print(res);

}%>

学号姓名年龄操作

//获取request域中的数据

Liststudents=( List) request.getAttribute("students");for(Student student:students){%>

">">删除

增加

studentinfo.jsp 以表单形式显示具体信息

可以直接填写表单进行修改

Insert title here

学号:>
姓名:>
年龄:>
地址:>

返回

成品示例(需要链接中不显示具体信息,再提交表单处增加 method='post')

进入界面显示所有学生信息

c9fd0f6c7d3bcbd8e231e5440ede9846.png

点击学号1查看具体信息

1e645b677c9c9096c3f0a695aacc0711.png

直接修改数据

0ed04faf3da51ef195f7a8bdfc80acc4.png

点击增加可直接增加数据

b248a873de41e7a5ad3f8d1e77b2964b.png

新增后跳转回显示全部基本信息

47e317a9aba461af9cc87ddab682ced9.png

点击删除后直接删除行列

ca9a16a346b87280c61eb028faee1aee.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值