通过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

相关文章

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u