题目:
设计实现
DAO
设计模式中的雇员的添加、查询操作,并通过
JSP
进行界面展示
目录:
![](https://img-blog.csdnimg.cn/e729cb22ae2b4318921aaf4c972f6ffb.png)
首先是在src下创建dao包和Test包并在其下创建dbc包和vo包
1.在vo包下创建Emp
package dao.vo;
import java.util.Date;
public class Emp {
private int empno;
private String ename;
private String job;
private Date hierdate;
private float comm;
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public int getEmpno() {
return empno;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Date getHierdate() {
return hierdate;
}
public void setHierdate(Date hierdate) {
this.hierdate = hierdate;
}
public float getComm() {
return comm;
}
public void setComm(float comm) {
this.comm = comm;
}
2.在dbc包中创建DatabaseConnection
package dao.dbc;
import java.sql.Connection;
public interface DatabaseConnection {
public Connection getConnection();
public void close() throws Exception;
}
3.创建DatabaseConnection的子类并实现数据库连接的MysqlDatabaseConnection
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/mldn";
private static final String DBUSER = "root";
private static final String DBPASS = "2963779hxb";
private Connection conn = null;
public MysqlDatabaseConnection() throws Exception {
try {
Class.forName(DBDRIVER);
this.conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
} 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;
}
}
}
}
4.在dao包中创建IEmpDAO
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 keyWord) throws Exception;
public Emp findByid(int empno) throws Exception;
}
5.在dao包中创建EmpDAOImpI真实主题实现类
package dao;
import java.sql.*;
import java.sql.Date;
import java.util.*;
import dao.vo.Emp;
import dao.IEmpDAO;
public class EmpDAOImpI implements IEmpDAO{//真实主题实现类
private Connection conn = null;
private PreparedStatement pstmt = null;
public EmpDAOImpI(Connection conn){
this.conn = conn;
}
public boolean doCreate(Emp emp) throws Exception{
boolean flag = false;
String sql = "INSERT INTO emp (empno,ename,job,hiredate,comm) VALUE (?,?,?,?,?)";
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 Date(emp.getHierdate().getTime()));
this.pstmt.setFloat(5,emp.getComm());
if (this.pstmt.executeUpdate()>0){
flag = true;
}
this.pstmt.close();
return flag;
}
public List<Emp> findAll(String keyWord) throws Exception{
List<Emp> all = new ArrayList<>();//定义集合,接收全部数据
String sql = "SELECT empno,ename,job,hiredate,comm 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();
emp.setEmpno(rs.getInt(1));
emp.setEname(rs.getString(2));
emp.setJob(rs.getString(3));
emp.setHierdate(rs.getDate(4));
emp.setComm(rs.getFloat(5));
all.add(emp);
}
this.pstmt.close();
return all;
}
public Emp findByid(int empno) throws Exception{
Emp emp = null;
String sql ="SELECT empno,ename,job,hiredate,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.setEmpno(rs.getInt(1));
emp.setEname(rs.getString(2));
emp.setJob(rs.getString(3));
emp.setHierdate(rs.getDate(4));
emp.setComm(rs.getFloat(5));
}
this.pstmt.close();
return emp;
}
}
6.创建EmpDAOProxy代理主题实现类
package dao;
import java.util.List;
import dao.IEmpDAO;
import dao.EmpDAOImpI;
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 EmpDAOImpI(this.dbc.getConnection());
}
public boolean doCreate(Emp emp) throws Exception{
boolean flag = false;
try{
if (this.dao.findByid(emp.getEmpno())==null){
flag = this.dao.doCreate(emp);
}
}catch (Exception e){
throw e;
} finally{
this.dbc.close();;
}
return flag;
}
public List<Emp> findAll(String keyWorld) throws Exception {
List<Emp> all = null;
try {
all = this.dao.findAll(keyWorld);
} catch (Exception e) {
throw e;
} finally {
this.dbc.close();
}
return all;
}
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;
}
}
7.创建DAOFactory工厂类
package dao;
import dao.IEmpDAO;
import dao.EmpDAOProxy;
public class DAOFactory {
public static IEmpDAO getIEmpDAOinstance() throws Exception{
return new EmpDAOProxy();
}
}
8.开始插入测试和选择测试
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 x = 0;x<5;x++){
emp = new Emp();
emp.setEmpno(1000+x);
emp.setEname("hxb -"+x);
emp.setJob("程序员 -"+x);
emp.setHierdate(new java.util.Date());
emp.setComm(500*x);
DAOFactory.getIEmpDAOinstance().doCreate(emp);
}
}
}
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();//Iterator访问List集合
while (iter.hasNext()) {//hasNext ()方法判断输入(文件、字符串、键盘等输入流)是否还有下一个输入项
Emp emp = iter.next();//取出每个对象
System.out.println(emp.getEmpno() + "、" + emp.getEname() + "-->" + emp.getEname());
}
}
}
最后是程序雇员页面
emp_insert
<%--
Created by IntelliJ IDEA.
User: HUAWEI
Date: 2022/11/25
Time: 21:48
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>insert 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="comm"><br>
<input type="submit" value="添加">
<input type="reset" value="重置">
</form>
</body>
</html>
emp_insert_do
<%--
Created by IntelliJ IDEA.
User: HUAWEI
Date: 2022/11/25
Time: 21:51
To change this template use File | Settings | File Templates.
--%>
<%@ page import="dao.vo.Emp" %>
<%@ page import="dao.*" %>
<%@ page import="java.text.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>insert finish</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.setHierdate(new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("hiredate")));
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
<%--
Created by IntelliJ IDEA.
User: HUAWEI
Date: 2022/11/25
Time: 21:54
To change this template use File | Settings | File Templates.
--%>
<%@ page import="dao.DAOFactory" %>
<%@ page import="dao.vo.*" %>
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</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>
</tr>
<%
while(iter.hasNext()){
Emp emp=iter.next();
%>
<tr>
<td><%=emp.getEmpno() %></td>
<td><%=emp.getEname() %></td>
<td><%=emp.getJob() %></td>
<td><%=emp.getHierdate() %></td>
<td><%=emp.getComm() %></td>
</tr>
<%
}
%>
</table>
<%
}catch(Exception e){
e.printStackTrace();
}
%>
</body>
</html>