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

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、