实验五 JSP+JavaBean 应用程序设计

实验内容与结果

在实验四的基础上,设计实现 DAO 设计模式中的雇员的添加、查询操作,并通过 JSP进行界面展示(参考课本 p204-p209)。

mysql数据表的设计

数据表设计

项目结构

项目结构

定义对应的VO类——Emp.java

package dao.vo;

import java.util.Date;

public class Emp {
	private int empno;
	private String ename;
	private String job;
	private Date hiredate;
	private float sal;
	private float comm;

	public float getComm() {
		return comm;
	}

	public void setComm(float comm) {
		this.comm = comm;
	}

	public int getEmpno() {
		return empno;
	}

	public String getEname() {
		return ename;
	}

	public String getJob() {
		return job;
	}

	public Date getHiredate() {
		return hiredate;
	}

	public float getSal() {
		return sal;
	}

	public void setEmpno(int empno) {
		this.empno = empno;
	}

	public void setEname(String ename) {
		this.ename = ename;
	}

	public void setJob(String job) {
		this.job = job;
	}

	public void setHiredate(Date hiredate) {
		this.hiredate = hiredate;
	}

	public void setSal(float sal) {
		this.sal = sal;
	}
}

数据库连接接口——DatabaseConnection.java

package dao.dbc;

import java.sql.Connection;

public interface DatabaseConnection {
	public Connection getConnection();

	public void close() throws Exception;
}

连接Mysql实现DatabaseConnection接口——MysqlDatabaseConnection.java

package dao.dbc;

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

public class MysqlDatabaseConnection implements DatabaseConnection {
	private static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
	private static final String DBURL = "jdbc:mysql://localhost:3306/demo1?useUnicode=true&characterEncoding=UTF-8";
	private static final String DBUSER = "root";
	private static final String DBPASSWORD = "123456";
	private Connection conn = null;

	public MysqlDatabaseConnection() throws Exception {
		try {
			Class.forName(DBDRIVER);
			this.conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public Connection getConnection() {
		// TODO Auto-generated method stub
		return this.conn;
	}

	@Override
	public void close() throws Exception {
		// TODO Auto-generated method stub
		if (this.conn != null) {
			try {
				this.conn.close();
			} catch (Exception e) {
				throw e;
			}
		}

	}
}

定义DAO操作标准——IEmpDAO.java

package dao;

import java.util.List;

import dao.vo.Emp;

public interface IEmpDAO {
	public boolean doCreate(Emp emp) throws Exception;

	public List<Emp> findAll(String keyWorld) throws Exception;

	public Emp findByid(int empno) throws Exception;
}

真实主题实现类——EmpDAOImpl.java

package dao;

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

import dao.vo.Emp;

public class EmpDAOImpl implements IEmpDAO {
	private Connection conn = null;
	private PreparedStatement pstmt = null;

	public EmpDAOImpl(Connection conn) {
		this.conn = conn;
	}

	@Override
	public boolean doCreate(Emp emp) throws Exception {
		// TODO Auto-generated method stub
		boolean flag = false;
		String sql = "insert into emp(empno,ename,job,hiredate,sal,comm) values (?, ?, ?, ?, ?, ?);";
		this.pstmt = this.conn.prepareStatement(sql);
		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());
		this.pstmt.setFloat(6, emp.getComm());
		if (this.pstmt.executeUpdate() > 0) {
			flag = true;
		}
		this.pstmt.close();
		return flag;
	}

	@Override
	public List<Emp> findAll(String keyWorld) throws Exception {
		// TODO Auto-generated method stub
		List<Emp> all = new ArrayList<Emp>();
		String sql = "select * from emp where ename like ? or job like ?";
		this.pstmt = this.conn.prepareStatement(sql);
		this.pstmt.setString(1, "%" + keyWorld + "%");
		this.pstmt.setString(2, "%" + keyWorld + "%");
		ResultSet rs = this.pstmt.executeQuery();
		Emp emp = null;
		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));
			emp.setComm(rs.getFloat(6));
			all.add(emp);
		}
		this.pstmt.close();
		return all;
	}

	@Override
	public Emp findByid(int empno) throws Exception {
		// TODO Auto-generated method stub
		Emp emp = null;
		String sql = "select empno, ename, job, hiredate, sal, comm from emp where empno = ?";
		this.pstmt = this.conn.prepareStatement(sql);
		this.pstmt.setInt(1, empno);
		ResultSet rs = this.pstmt.executeQuery();
		if (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));
			emp.setComm(rs.getFloat(6));
		}
		this.pstmt.close();
		return emp;
	}
}

代理主题实现类——EmpDAOProxy.java:

package dao;

import java.util.List;

import dao.dbc.DatabaseConnection;
import dao.dbc.MysqlDatabaseConnection;
import dao.vo.Emp;

public class EmpDAOProxy implements IEmpDAO {
	private DatabaseConnection dbc = null;
	private IEmpDAO dao = null;

	public EmpDAOProxy() throws Exception {
		this.dbc = new MysqlDatabaseConnection();
		this.dao = new EmpDAOImpl(this.dbc.getConnection());
	}

	@Override
	public boolean doCreate(Emp emp) throws Exception {
		// TODO Auto-generated method stub
		boolean flag = false;
		try {
			if (this.dao.findByid(emp.getEmpno()) == null) {
				flag = this.dao.doCreate(emp);
			}
		} catch (Exception e) {
			// TODO: handle exception
			throw e;
		} finally {
			this.dbc.close();
		}
		return flag;
	}

	@Override
	public List<Emp> findAll(String keyWorld) throws Exception {
		// TODO Auto-generated method stub
		List<Emp> all = null;
		try {
			all = this.dao.findAll(keyWorld);
		} catch (Exception e) {
			// TODO: handle exception
			throw e;
		} finally {
			this.dbc.close();
		}
		return all;
	}

	@Override
	public Emp findByid(int empno) throws Exception {
		// TODO Auto-generated method stub
		Emp emp = null;
		try {
			emp = this.dao.findByid(empno);
		} catch (Exception e) {
			// TODO: handle exception
			throw e;
		} finally {
			this.dbc.close();
		}
		return emp;
	}
}

DAO工厂类——DAOFactory

package dao;

public class DAOFactory {
	public static IEmpDAO getIEmpDAOInstance() throws Exception {
		// TODO Auto-generated method stub
		return new EmpDAOProxy();
	}
}

测试DAO插入功能——TestDAOInsert.java

package Test;

import dao.DAOFactory;
import dao.vo.Emp;

public class TestDAOInsert {
	public static void main(String[] args) throws Exception {
		Emp emp = null;
		for (int i = 0; i < 6; i++) {
			emp = new Emp();
			emp.setEmpno(i + 1000);
			emp.setEname("李兴华-" + i);
			emp.setJob("程序员-" + i);
			emp.setHiredate(new java.util.Date());
			emp.setSal(10000 + i);
			emp.setComm(2000 + i);
			DAOFactory.getIEmpDAOInstance().doCreate(emp);
		}
	}
}

插入结果:
插入操作测试

测试查询操作——TestDAOSelect.java

package Test;

import java.util.Iterator;
import java.util.List;

import dao.DAOFactory;
import dao.vo.Emp;

public class TestDAOSelect {
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		List<Emp> all = DAOFactory.getIEmpDAOInstance().findAll("");
		Iterator<Emp> iter = all.iterator();
		while (iter.hasNext()) {
			Emp emp = iter.next();
			System.out.println(emp.getEmpno() + "、" + emp.getEname() + "-->" + emp.getEname());
		}
	}
}

程序运行结果:
查询操作测试

增加雇员——emp_insert.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
%>
<form action="emp_insert_do.jsp" method="post">
雇员编号:<input type="text" name="empno"><br>
雇员姓名:<input type="text" name="ename"><br>
雇员职位:<input type="text" name="job"><br>
雇佣日期:<input type="text" name="hiredate"><br>
基本工资:<input type="text" name="sal"><br>
雇员奖金:<input type="text" name="comm"><br>
<input type="submit" value="添加">
<input type="reset" value="重置">
</form>
</body>
</html>

完成增加雇员的操作——emp_insert_do.jsp

<%@ page import="dao.vo.Emp" %>
<%@ page import="dao.*" %>
<%@ page import="java.text.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
Emp emp=new Emp();
emp.setEmpno(Integer.parseInt(request.getParameter("empno")));
emp.setEname(request.getParameter("ename"));
emp.setJob(request.getParameter("job"));
emp.setHiredate(new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("hiredate")));
emp.setSal(Float.parseFloat(request.getParameter("sal")));
emp.setComm(Float.parseFloat(request.getParameter("comm")));
try{
	if(DAOFactory.getIEmpDAOInstance().doCreate(emp)){
		%>
		<h3>雇员信息添加成功!</h3>
		<%
	}else{
		%>
		<h3>雇员信息添加失败!</h3>
		<%
	}
}catch(Exception e){
	e.printStackTrace();
}
		%>
</body>
</html>

雇员增加表单:
雇员增加表单
雇员添加成功

数据查询——emp_list.jsp

<%@ page import="dao.DAOFactory" %>
<%@ page import="dao.vo.*" %>
<%@ page import="java.util.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
try{
	String keyWord=request.getParameter("kw");
	if(keyWord==null){
		keyWord="";
	}
	List<Emp> all=DAOFactory.getIEmpDAOInstance().findAll(keyWord);
	Iterator<Emp> iter=all.iterator();
	%>
	<form action="emp_list.jsp" method="post">
	请输入查询关键字:<input type="text" name="kw">
	<input type="submit" value="查询">
	</form>
	<table border="1" width="80%">
	<tr>
	<td>雇员编号</td>
	<td>雇员姓名</td>
	<td>雇员职位</td>
	<td>雇佣日期</td>
	<td>基本工资</td>
	<td>雇员奖金</td>
	</tr>
	<%
	while(iter.hasNext()){
		Emp emp=iter.next();
		%>
		<tr>
		<td><%=emp.getEmpno() %></td>
		<td><%=emp.getEname() %></td>
		<td><%=emp.getJob() %></td>
		<td><%=emp.getHiredate() %></td>
		<td><%=emp.getSal() %></td>
		<td><%=emp.getComm() %></td>
		</tr>
		<%
	}
		%>
	</table>
		<%
}catch(Exception e){
	e.printStackTrace();
}
		%>
</body>
</html>

查询全部雇员的信息:
全部雇员
模糊查询:
模糊查询

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐