简单web系统理解JavaBean、DAO、VO和servlet(一)

此处用的是一个java web系统的一个staff表操作的模块,核心部分包括表的设计、数据库连接、数据封装类(VO)的创建、封装业务的JavaBean(DAO)、servlet和jsp结合对数据库进行操作和显示。其他业务的操作大同小异。
涉及到的类、jsp和servlet
ConnectionManager.java
Staff.java
Staff_Interface.java
OperateStaff.java
servlet如下:
GetStaff.java
doAddStaff.java
doEditStaff.java
doDeleteStaff.java
配置文件:web.xml
jsp如下:
AddStaff.jsp
EditStaff.jsp
ShowStaff.jsp
error.jsp
使用sql server 数据库,staff表如下:
在这里插入图片描述
此数据表不是本人设计,在字段设置上有缺陷,还有数据库的编码也存在问题,此处只展示表的大体结构,大家在数据库设计上一定要力求完整!
接下来分析每个类的作用,以便理解DAO,VO,下篇再分析servlet。

ConnectionManager.java
此类是数据库管理类,注册数据库驱动和获取数据库连接,以及关闭数据库连接,其中,getConnection()方法用于返回连接对象dbconnection(后面用得到),另外还含有Connection、ResultSet、Statement对象的关闭方法,如void getConnection(Connection con){省略}

package beans;

//对数据库连接的类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ConnectionManager {
	private static final String DRIVER_CLASS="com.microsoft.sqlserver.jdbc.SQLServerDriver";
	private static final String DATABASE_URL="jdbc:sqlserver://127.0.0.1:1433;databaseName=数据库名称";
	private static final String DATABASE_USER="sa";
	private static final String DATABASE_PASSWORD="123456";
	//返回连接
	public static Connection getConnection(){
		Connection dbConnection=null;
		try{
			Class.forName(DRIVER_CLASS);
			dbConnection=DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
			//System.out.println("连接:"+dbConnection);
		}catch(Exception e){
			e.printStackTrace();
		}
		return dbConnection;
	}
	//书上没有,增加的关闭数据库连接的一些代码
	public static void closeConnection(Connection connection) throws SQLException{
		connection.close();
	}
	public static void closeResultSet(ResultSet results) throws SQLException{
		results.close();
	}
	public static void closeStatement(PreparedStatement st) throws SQLException{
		st.close();
	}
}

Staff.java
是一个封装数据的JavaBean(类),也是一个VO(VO就是一个简单的JavaBean),JavaBean 中定义了成员变量和相应的set和get方法。

package beans;
//数据封装类
public class staff {
	private String staffID;//员工id
	private String staffName;//员工姓名
	private String staffPhone;//员工电话
	private int staffAge;//员工年龄
	private String staffPassword;//员工密码
	private String worktime;//上班时段
	private String managerID;//店长编号
	public String getStaffID() {
		return staffID;
	}
	public void setStaffID(String staffID) {
		this.staffID = staffID;
	}
	public String getStaffName() {
		return staffName;
	}
	public void setStaffName(String staffName) {
		this.staffName = staffName;
	}
	public String getStaffPhone() {
		return staffPhone;
	}
	public void setStaffPhone(String staffPhone) {
		this.staffPhone = staffPhone;
	}
	public int getStaffAge() {
		return staffAge;
	}
	public void setStaffAge(int staffAge) {
		this.staffAge = staffAge;
	}
	public String getStaffPassword() {
		return staffPassword;
	}
	public void setStaffPassword(String staffPassword) {
		this.staffPassword = staffPassword;
	}
	public String getWorktime() {
		return worktime;
	}
	public void setWorktime(String worktime) {
		this.worktime = worktime;
	}
	public String getManagerID() {
		return managerID;
	}
	public void setManagerID(String managerID) {
		this.managerID = managerID;
	}
}

Staff_Interface.java
Staff表的操作接口类,在接口类中定义类的方法原型,在具体类OperateStaff.java(DAO)中实现接口。设置接口的作用主要是便于对程序扩充。

package beans;

//员工信息表接口
import java.util.List;
public interface Staff_Interface {
		public List getStaff();//获得员工列表
		public int AddStaff(staff st);//添加员工
		public int DeleteStaff(String staffID);//删除员工
		public int UpdateStaff(staff st);//修改员工信息
		public staff FindStaff(String staffID);//查找员工
}

OperateStaff.java
为一个DAO,封装了数据库的操作,如增加、删除、修改、查找,在此DAO中,会把从数据库查询到的信息实例化为VO(用查询到的信息来实例化VO(如此处的staff.java类)),再将实例化的VO放入ArrayList数组中(或其他存储对象中,如HashMap对象)。
DAO中一般含有如下结构:
ArrayList stlist=new ArrayList();

获取连接对象(用上面的getConnection()),然后查询
while(rs.next())
	Staff staff=new Staff();//每次创建一个封装类的实例
	staff.setXX(省略);//调用set方法实例化VO(就是那个staff类)
	然后,用stlist.add(staff);//将实例化的类添加到数组中
	最后,返回return stlist;//返回ArrayList对象,后面的servlet中用得到
package beans;
//数据库表操作类
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class OperateStaff implements Staff_Interface{//实现staff接口
	private Connection connection;
	private PreparedStatement StaffQuery;
	private ResultSet results;
	public List getStaff(){//用于ShowStaff中员工信息的显示
		List staffList=new ArrayList();
		//获取员工列表
		try{
			connection=ConnectionManager.getConnection();
			StaffQuery=connection.prepareStatement("select staffID,staffName,staffPhone,staffAge,worktime,managerID from dbo.员工信息");
			results=StaffQuery.executeQuery();
			//读取行数据
			while(results.next()){
				staff st=new staff();//每次创建一个封装类的实例,实例化一个javabean
				//将数据表中的一条记录数据添加到到封装类中
				st.setStaffID(results.getString("staffID"));
				st.setStaffName(results.getString("staffName"));
				st.setStaffPhone(results.getString("staffPhone"));
				st.setStaffAge(results.getInt("staffAge"));
				st.setWorktime(results.getString("workTime"));
				st.setManagerID(results.getString("managerID"));
				staffList.add(st);
			}
		}catch(SQLException e){
			e.printStackTrace();
		}
		//释放资源
		finally{
		
			try {
				ConnectionManager.closeConnection(connection);
				ConnectionManager.closeStatement(StaffQuery);
				ConnectionManager.closeResultSet(results);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 						
		}
		return staffList;
	}
	public int AddStaff(staff st){//利用封装类的实例插入记录
		int result=0;
		try{
			connection=ConnectionManager.getConnection();
			String sql="insert into dbo.员工信息 values(?,?,?,?,?,?)";
			StaffQuery=connection.prepareStatement(sql);
			StaffQuery.setString(1, st.getStaffID());
			StaffQuery.setString(2, st.getStaffName());
			StaffQuery.setString(3,st.getStaffPhone());
			StaffQuery.setInt(4,st.getStaffAge());
			StaffQuery.setString(5, st.getWorktime());
			StaffQuery.setString(6, st.getManagerID());
			result=StaffQuery.executeUpdate();	
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try{				//ConnectionManager.closeResultSet(results);
				ConnectionManager.closeStatement(StaffQuery);
				ConnectionManager.closeConnection(connection);
				
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return result;
	}
	public int DeleteStaff(String staffID){
		int result=0;
		try{
			connection=ConnectionManager.getConnection();
			String sql="delete from dbo.员工信息  where staffID='"+staffID+"'";
			StaffQuery=connection.prepareStatement(sql);
			result=StaffQuery.executeUpdate();
			
		}catch(Exception e){
			e.printStackTrace();
		}//释放资源
		finally{
			
			try {
				//ConnectionManager.closeResultSet(results);
				ConnectionManager.closeStatement(StaffQuery);
				ConnectionManager.closeConnection(connection);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return result;
	}
	public int UpdateStaff(staff st){//利用封装类的实例来更新表中记录
		int result=0;
		try{
			connection=ConnectionManager.getConnection();
			String sql="update dbo.员工信息  set staffName=?,staffPhone=?,staffAge=?,worktime=? where staffID=?";
			StaffQuery=connection.prepareStatement(sql);
			StaffQuery.setString(1, st.getStaffName());
			StaffQuery.setString(2,st.getStaffPhone());
			StaffQuery.setInt(3, st.getStaffAge());
			StaffQuery.setString(4, st.getWorktime());
			StaffQuery.setString(5,st.getStaffID());
			result=StaffQuery.executeUpdate();
		}catch(Exception e){
			e.printStackTrace();
		}//释放资源
		finally{
			try{
				//ConnectionManager.closeResultSet(results);
				ConnectionManager.closeStatement(StaffQuery);
				ConnectionManager.closeConnection(connection);
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		
		return result;  
	}
	public staff FindStaff(String staffID){//根据员工编号查找
		staff st=null;
		try{
			connection=ConnectionManager.getConnection();
			String sql="select * from dbo.员工信息  where staffID='"+staffID+"'";
		    StaffQuery=connection.prepareStatement(sql);
		    results=StaffQuery.executeQuery();
		    if(results.next()){
		    	st=new staff();//每次创建一个封装类的实例
		    	//将数据表中的一条记录添加到封装类中
		    	st.setStaffID(results.getString("staffID"));
		    	st.setStaffName(results.getString("staffName"));
		    	st.setStaffPhone(results.getString("staffPhone"));
		    	st.setStaffAge(results.getInt("staffAge"));
		    	st.setWorktime(results.getString("worktime"));
		    	st.setManagerID(results.getString("managerID"));
		    }
			
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try{
				ConnectionManager.closeResultSet(results);
				ConnectionManager.closeStatement(StaffQuery);
				ConnectionManager.closeConnection(connection);
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return st;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值