雇员管理系统(Jsp+DAO)

项目要求:

1、使用JSP+DAO开发模式完成一个简单的雇员管理系统。系统主要功能如下:

  • 登录验证:用户通过验证用户名密码进入后台管理界面
  • 雇员列表:后台管理首页是雇员列表展示页面,并可以通过雇员编号、姓名等关键词查询出符合条件的雇员记录
  • 添加雇员:新增雇员必填信息包括雇员编号、姓名,编号必须唯一;
  • 编辑雇员:编辑雇员资料,必须确保编号唯一,姓名不能为空。

具体功能模块样式可以参照提供的项目原型

2、相关数据结构,数据库采用mysql。

序号

字段名

中文名

类型

是否为空

备注

1

empno

雇员编号

varchar(10)

2

ename

雇员姓名

varchar(20)

3

hiredate

雇佣日期

date

4

job

工作

varchar(20)

5

sal

工资

double

小数点保留2位

3、按照DAO的方式完成后端代码开发,定义VO类,DatabaseConnection.java类,定义DAO操作标准和代理主题实现类和DAO工厂类

完成思路:

1.页面设计:对于页面暂时不适用css等进行优化,使用html表单即可.

2.设计开发项目目录

2.组成部件:数据库(利用可视化界面或者后台新建表单),设计VO类(雇员,登录用户),设计DAO接口以及实现,工厂类

完整工程文件: Employee_system

  • 实验步骤和结果

1.建表emp : mysql navcat中显示的表信息

2.建立项目相关夹:在WebContent下建立jsp文件夹,在JavaResources 下建立各包

3.先写javaBean信息,dao工具类,再写jsp内容

4.调试

运行结果:

1.登录界面

1*.登录失败时

2.雇员信息管理界面

3.添加雇员

添加成功

4.更新雇员信息 (与注册添加雇员一样的界面,但是通过超链接跳转传,会在文本框内显示修改的雇员信息)

部分代码:

2.Connection conn = null; JDBC连接数据库驱动.声明数据库连接对象

DatabaseConnection.java (封装数据库连接类)

package dbc;

import java.sql.Connection;
import java.sql.DriverManager;

//数据库连接类
public class DatabaseConnection {
	private static final String DBDRIVER = "";
	private static final String DBURL = "";
	private static final String DBUSER = "";
	private static final String DBPASSWORD= "";
	private Connection conn = null;
	//构造方法中进行数据连接
	public DatabaseConnection() throws Exception{
		try{
			//Class.forName 方法的作用,就是初始化给定的类
			Class.forName(DBDRIVER);//加载驱动程序
			this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);			
		}catch(Exception e){
			throw e;
		}
	}
	public Connection getConnection(){
		return this.conn;
	}
	public void close () throws Exception{
		if(this.conn!=null){
			try{
				this.conn.close();
					
			}catch(Exception e){
				throw e;
			}	
		}
	}
}

3.Emp.java (VO类) 

玩转Eclipse — 自动生成setter和getter方法_懒,是我追求的美德-CSDN博客_eclipse getter setter快捷键 快速设置setter , getter 方法

使用快捷键Alt + Shift + S,再按R键(你Eclipse中的快捷键可能不同),或者右键选择Source -> Generate Getters and Setters...

package com.tt.vo;

import java.util.Date;

public class Emp {
	private int empno;
	private String ename;
	private String job;
	private Date hiredate;
	private float sal;
	public int getEmpno() {
		return empno;
	}
	public void setEmpno(int empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public Date getHiredate() {
		return hiredate;
	}
	public void setHiredate(Date hiredate) {
		this.hiredate = hiredate;
	}
	public float getSal() {
		return sal;
	}
	public void setSal(float sal) {
		this.sal = sal;
	}
}

4.dao : 设计DAO操作接口

package com.tt.dao;

import java.util.List;

import com.tt.vo.Emp;

public interface IEmpDAO {
	public boolean doCreate (Emp emp) throws Exception; 
	//查询全部数据
	public List<Emp> findAll(String keyWord) throws Exception;
	//按照雇员的编号查询数据
	public Emp findByld (int empno) throws Exception;
	//更新职工信息
	public boolean updateInfo (Emp emp) throws Exception; 
}

真实主题实现DAO

package com.tt.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.tt.vo.Emp;

public class EmpDAOImpl implements IEmpDAO{
	private Connection conn = null;//连接对象
	private PreparedStatement pstmt = null;//数据库操作对象
	//构造方式去得连接
	public EmpDAOImpl(Connection conn){
		this.conn = conn;
	}
	public boolean doCreate (Emp emp) throws Exception{
		boolean flag = false;
		//插入的sql语句
		String sql = "INSERT INTO emp(empno,ename,job,hiredate,sal) VALUES (?,?,?,?,?)";
		//实例化pstmt对象
		this.pstmt = this.conn.prepareStatement(sql);
		//pstmt的设置方法:通过传入emp 对象来获取对象信息
		this.pstmt.setInt(1,emp.getEmpno());
		this.pstmt.setString(2,emp.getEname());
		this.pstmt.setString(3,emp.getJob());
		this.pstmt.setDate(4,new java.sql.Date(emp.getHiredate().getTime()));
		this.pstmt.setFloat(5,emp.getSal());
		//执行操作次数
		if(this.pstmt.executeUpdate()>0){
			flag = true;
		}
		//执行对象关闭
		this.pstmt.close();
		return flag;
	}
	public boolean updateInfo (Emp emp) throws Exception{
		boolean flag = false;
		int count = 0;
		//sql的更新语句
		String sql = "update emp set empno='"+emp.getEmpno()
		+"'job'"+emp.getJob()+"'hiredate'"+emp.getHiredate().getTime()+"'sal'"+emp.getSal()
		+"where ename="+emp.getEname();
        try {
            System.out.println("准备更新 id 为 "+emp.getEname()+"的记录...");

            Statement st = this.conn.createStatement();
            count = st.executeUpdate(sql);

            if (count != 0) {
                System.out.print("更新成功!!! ");
            } else {
                System.out.print("update error!!! ");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
         
        }
        if(count != 0) return true;
        else return false;
	}
	//查询全部数据:;利用list存储返回对象
	public List<Emp> findAll(String keyWord) throws Exception{
		List<Emp> all = new ArrayList<Emp>();
		String sql = "SELECT empno,ename,job,hiredate,sal FROM emp WHERE ename LIKE ? OR job LIKE ?";
		this.pstmt = this.conn.prepareStatement(sql);
		this.pstmt.setString(1,"%"+keyWord+"%");//设置查找关键字
		this.pstmt.setString(2,"%"+keyWord+"%");
		ResultSet rs = this.pstmt.executeQuery();
		Emp emp= null;
		while(rs.next()){
			emp = new Emp();
			//get类型+对象序号
			emp.setEmpno(rs.getInt(1));
			emp.setEname(rs.getString(2));
			emp.setJob(rs.getString(3));
			emp.setHiredate(rs.getDate(4));
			emp.setSal(rs.getFloat(5));
			all.add(emp);
		}
		//关闭连接对象
		this.pstmt.close();
		//返回所有对象
		return all;
	}
	//按照雇员的编号获取对象信息
	public Emp findByld (int empno) throws Exception{
		Emp emp = null;
		String sql = "SELECT empno,ename,job,hiredate,sal FROM emp WHERE empno = ?";
		this.pstmt = this.conn.prepareStatement(sql);
		this.pstmt.setInt(1,empno);
		ResultSet rs = this.pstmt.executeQuery();
		while(rs.next()){
			emp = new Emp();
			emp.setEmpno(rs.getInt(1));
			emp.setEname(rs.getString(2));
			emp.setJob(rs.getString(3));
			emp.setHiredate(rs.getDate(4));
			emp.setSal(rs.getFloat(5));	
		}
		this.pstmt.close();
		return emp;
	}
}

代理类(未写完):

package com.tt.dao;

import java.sql.Connection;
import java.text.SimpleDateFormat;
import java.util.List;

import com.tt.vo.Emp;
import com.util.dbc.DatabaseConnection;

public class EmpDAOProxy implements IEmpDAO {
	//数据库连接类(工具类)
	private DatabaseConnection dbc = null;
	//真实DAO对象
	private IEmpDAO dao = null;
	private Connection conn = null;//连接对象
	//构造方法中实例化对象
	public EmpDAOProxy() throws Exception{
		this.dbc = new DatabaseConnection();
		//传入或得的conn对象
		this.dao = new EmpDAOImpl(this.dbc.getConnection());
	}
	public boolean doCreate (Emp emp) throws Exception{
		boolean flag = false;
		try {
			if(this.dao.findByld(emp.getEmpno())==null) {
				flag = this.dao.doCreate(emp);
			}
		}catch(Exception e) {
			throw e;
		}finally {
			this.dbc.close();
		}
		return flag;
	}
	//查询全部数据:;利用list存储返回对象
	public List<Emp> findAll(String keyWord) throws Exception{
		List<Emp>all = null;
		try {
			all = this.dao.findAll(keyWord);
		}catch (Exception e){
			throw e;
		}finally {
			this.dbc.close();
		}
		return all;
	}
	//按照雇员的编号获取对象信息
	public Emp findByld (int empno) throws Exception{
		Emp emp = null;
		try {
			emp = this.dao.findByld(empno);
		} catch(Exception e) {
			throw e;
		}finally {
			this.dbc.close();
		}
		return emp;
	}
	public boolean updateInfo (Emp emp) throws Exception{
		boolean flag = false;
		try {
			if(this.dao.findByld(emp.getEmpno())==null) {
				flag = this.dao.updateInfo(emp);
			}
		}catch(Exception e) {
			throw e;
		}finally {
			this.dbc.close();
		}
		return flag;
	}
}

代理工厂:

package factory;

import dao.EmpDAOProxy;
import dao.IEmpDAO;

public class DAOFactory {
	public static IEmpDAO getIEmpDAOInstance () throws Exception{
		return new EmpDAOProxy();
	}
}

总结:

对数据库的操作流程:

通过 DAOFactory 创建 EmpDAOProxy (代理类) 获得 IEmpDAO 接口功能

EmpDAOProxy 通过利用 DatabaseConnection 取得数据库连接,传入 实例化 IEmpDAO(真实操作类),并通过真实类进行操作数据库.

IEmpDAO (真实类)通过定义 Connection(连接类),PreparedStatement(操作类),ResultSet (获取结果类)来操作返回 Emp 对象

最后页面通过取得 Emp 数据来进行输出.

源代码:

下载链接:

  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值