通过DAO设计模式实现雇员的添加、查询操作

2023-10-13 13:50

本文主要是介绍通过DAO设计模式实现雇员的添加、查询操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过DAO设计模式实现雇员的添加、查询操作

设计实现 DAO 设计模式中的雇员的添加、查询操作,并通过 JSP 进行界面展示

数据库页面
数据库页面

项目结构
项目结构

Emp.java

package test05;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 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 test05;import java.sql.Connection;public interface DataBaseConnection {public Connection getConnection();public void close() throws Exception;
}

MysqlDatabaseConnection.java

package test05;import java.sql.*;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?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;}}@Overridepublic Connection getConnection(){return this.conn;}@Overridepublic void close() throws Exception{if(this.conn != null){try{this.conn.close();}catch (Exception e){throw e;}}}
}

DatabaseConnectionFactory.java

package test05;public class DatabaseConnectionFactory {public static DataBaseConnection getDataBaseConnection() throws Exception{return new MysqlDatabaseConnection();}
}

IEmpDAO.java

package test05;import test05.Emp;
import java.util.List;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 test05;import test05.Emp;
import test05.IEmpDAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;public class EmpDAOImpl implements IEmpDAO {private Connection conn = null;private PreparedStatement pstmt = null;public EmpDAOImpl(Connection conn){this.conn = conn;}@Overridepublic boolean doCreate(Emp emp) throws Exception {boolean flag = false;String sql = "INSERT INTO emp(empno, ename, job, hiredate, sal) 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());if(this.pstmt.executeUpdate() > 0){flag = true;}this.pstmt.close();return flag;}@Overridepublic List<Emp> findAll(String keyWorld) throws Exception {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));all.add(emp);}this.pstmt.close();return all;}@Overridepublic Emp findByid(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();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));}this.pstmt.close();return emp;}
}

EmpDAOProxy.java

package test05;import java.util.List;import test05.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());}@Overridepublic boolean doCreate(Emp emp) throws Exception {// TODO Auto-generated method stubboolean flag=false;try {if(this.dao.findByid(emp.getEmpno())==null) {flag=this.dao.doCreate(emp);}}catch (Exception e) {// TODO: handle exceptionthrow e;}finally {this.dbc.close();}return flag;}@Overridepublic List<Emp> findAll(String keyWorld) throws Exception {// TODO Auto-generated method stubList<Emp> all=null;try {all=this.dao.findAll(keyWorld);}catch (Exception e) {// TODO: handle exceptionthrow e;}finally {this.dbc.close();}return all;}@Overridepublic Emp findByid(int empno) throws Exception {// TODO Auto-generated method stubEmp emp=null;try {emp=this.dao.findByid(empno);}catch (Exception e) {// TODO: handle exceptionthrow e;}finally {this.dbc.close();}return emp;}}

DAOFactory.java

package test05;import test05.IEmpDAO;
import test05.EmpDAOProxy;public class DAOFactory {public static IEmpDAO getIEmpDAOInstance()  throws Exception{// TODO Auto-generated method stubreturn new EmpDAOProxy();}
}

(插入测试类)
TestDAOInsert.java

package test05;import test05.DAOFactory;
import test05.Emp;public class TestDAOInsert {public static void main(String[] args) throws Exception{Emp emp=null;for(int i=0;i<5;i++) {emp=new Emp();emp.setEmpno(i+100);emp.setEname("张三-"+i);emp.setJob("音效师-"+i);emp.setHiredate(new java.util.Date());emp.setSal(10000+i);DAOFactory.getIEmpDAOInstance().doCreate(emp);}}
}

插入测试

(检索测试类)
TestDAOSelect.java

package test05;import java.util.Iterator;
import java.util.List;
import test05.DAOFactory;
import test05.Emp;public class TestDAOSelect {public static void main(String[] args) throws Exception{// TODO Auto-generated method stubList<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());}}}

检索测试

(首页)
index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<center>
<h1>首页</h1>
<br>
<a href="insert.jsp">添加雇员</a>
<br>
<a href="select.jsp">查询雇员</a>
</center>
</body>
</html>

首页

(添加雇员)
insert.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加雇员</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
%>
<form action="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="submit" value="添加">
<input type="reset" value="重置">
</form>
</body>
</html>

添加雇员

(添加雇员操作)
insert_do.jsp

<%@page import="java.text.*"%>
<%@page import="test05.DAOFactory"%>
<%@page import="test05.DatabaseConnectionFactory" %>
<%@page import="test05.Emp" %>
<%@page import="test05.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加雇员</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")));
try{if(DAOFactory.getIEmpDAOInstance().doCreate(emp)){%><h3>雇员信息添加成功!</h3><%}else{%><h3>雇员信息添加失败!</h3><%}
}catch(Exception e){e.printStackTrace();
}%>
</body>
</html>

(雇员查询)
select.jsp

<%@page import="test05.DAOFactory"%>
<%@page import="test05.DatabaseConnectionFactory" %>
<%@page import="test05.EmpDAOProxy" %>
<%@page import="test05.DataBaseConnection" %>
<%@page import="test05.EmpDAOImpl" %>
<%@page import="test05.IEmpDAO" %>
<%@page import="test05.MysqlDatabaseConnection" %>
<%@page import="test05.Emp" %>
<%@page import="java.util.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<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();%><center><form action="select.jsp" method="post">请输入查询关键字:<input type="text" name="kw"><input type="submit" value="查询"></form><table border="1"><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.getHiredate() %></td><td><%=emp.getSal() %></td></tr><%}%></table></center><%
}catch(Exception e){e.printStackTrace();
}%>
</body>
</html>

雇员查询操作前页面
雇员查询操作后页面

这篇关于通过DAO设计模式实现雇员的添加、查询操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/203653

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too