声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!!
目录
(2)删除所有员工信息:DelAllEmpServlet.java
(3)根据id删除员工信息:DelEmpServlet.java
(4)查询所有员工信息—表格显示:ListEmpServlet.java
(5)查询一条员工信息-->进行页面修改:LoadEmpServlet.java
(6)修改员工信息-进行数据库修改操作:UpdateEmpServlet.java
(7)step1,实体类--->entity包,Employee类(未修改-同上篇博文代码)
(8)step2,dao接口--->dao包,EmployeeDAO接口
(9)step3,实现dao接口--->dao.jdbc包,实现类(增删改查)
(10)step4,工厂--->util包,Factory类
(11)step5,封装数据库连接类--->util包,DBUtil类
(12)step6,配置文件--->util包,dao.properties
(13)step7,测试--->test包,TestCode类
一、前言
上一篇文章我们:演示体会dao模式_简单工厂模式_插入mysql数据库支持中文等代码,详细可参见博文:原创 java服务器端开发-servlet:4_1、体会dao模式_简单工厂模式_插入mysql数据库支持中文 这篇博文我们将之前文章的“增删改查”员工信息的代码,修改为 dao模式_工厂模式_“增删改查”员工信息。
之前代码可参考博文:原创 java服务器端开发-servlet:3_7、Servlet使用jdbc访问数据库:“增删改查”员工信息
二、dao模式_工厂模式_“增删改查”员工信息
1、比较使用dao、工厂模式后的代码
上一篇博文我们演示了dao、工厂模式的基本操作,这里就不多做介绍了,后面会在我的设计模式专题博文进行一些具体介绍,这里主要是跟修改前的代码进行比较,方便大家体会理解。
如下图的比较,相对之前的Servlet其实就是做了2个封装:
(1)封装 jdbc 连接数据库
(2)封装 jdbc 操作数据库(删除)
这里是比较删除相关的代码,其他“增查改”与之类似,就不再做比较了,这里就直接贴代码了。
2、修改后的“增删改查”员工信息的代码
(1)增加员工信息:AddEmpServlet.java
package web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.Factory;
import dao.EmployeeDAO;
import entity.Employee;
/**
* 添加一条员工信息
* @author luminal
*/
public class AddEmpServlet extends HttpServlet{
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
request.setCharacterEncoding("utf-8");
//读请求参数
String name = request.getParameter("name");
String salary = request.getParameter("salary");
String age = request.getParameter("age");
//服务端验证一定要有,此处省略...
response.setContentType(
"text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//将员工信息插入数据库
try {
//不要设计任何具体的实现: 具体实现类EmployeeDAOImpl
EmployeeDAO dao =
(EmployeeDAO)Factory.getInstance(
"EmployeeDAO");
Employee e = new Employee();
e.setName(name);
e.setSalary(Double.parseDouble(salary));
e.setAge(Integer.parseInt(age));
dao.save(e);
response.sendRedirect("show");
} catch (Exception e) {
e.printStackTrace();
out.println("系统繁忙,稍后重试");
}
}
}
(2)删除所有员工信息:DelAllEmpServlet.java
package web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.EmployeeDAO;
import util.Factory;
/**
* 删除所有员工数据【主要功能】
* @UpdateTime:2011年02月28日 下午17:30:00
* @ProjectName: 【项目名】
* @ClassName:【类名】
* @CategoryName:【类型】如:Activity
* @author:luminal、邮箱 luminal_yyh@163.com
* @since 1.0【版本】
* @Description:(可以在这里描述这个类的作用)
*
* 查询显示
* http://localhost:8080/web09/show
* --- 手动删除 ---
* 删除:根据最左边的id,进行删除
* http://localhost:8080/web09/del?id=xxx
*删除表内所有数据【谨慎使用,测试数据还得自己再次添加】
* http://localhost:8080/web09/delAll
*
*/
public class DelAllEmpServlet extends HttpServlet{
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
try {
//不要设计任何具体的实现: 具体实现类EmployeeDAOImpl
EmployeeDAO dao =
(EmployeeDAO)Factory.getInstance(
"EmployeeDAO");
dao.deleteAllData();
response.sendRedirect("show");
}catch(Exception e){
e.printStackTrace();
out.println("系统繁忙,稍后重试");
}
}
}
(3)根据id删除员工信息:DelEmpServlet.java
package web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.Factory;
import dao.EmployeeDAO;
/**
* 根据id删除员工信息
* @author luminal
*/
public class DelEmpServlet extends HttpServlet{
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
int id = Integer.parseInt(request.getParameter("id"));
try {
EmployeeDAO dao =
(EmployeeDAO)Factory.getInstance(
"EmployeeDAO");
dao.delete(id);
response.sendRedirect("show");
}catch(Exception e){
e.printStackTrace();
out.println("系统繁忙,稍后重试");
}
}
}
(4)查询所有员工信息—表格显示:ListEmpServlet.java
package web;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.Factory;
import dao.EmployeeDAO;
import entity.Employee;
/**
* 查询所有员工信息
* @author luminal
* http://localhost:8080/web09/show
*/
public class ListEmpServlet extends HttpServlet{
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
try {
out.println("<table border='1' width='60%' " +
"cellpadding='0' cellspacing='0'>");
out.println("<caption>"+"员工信息表"+"</caption>");//表头
out.println("<tr><td>ID</td><td>姓名</td>" +
"<td>薪水</td><td>年龄</td>" +
"<td>操作</td></tr>");
EmployeeDAO dao =
(EmployeeDAO)Factory.getInstance(
"EmployeeDAO");
List<Employee> employees =
dao.findAll();
for(int i=0;i<employees.size();i++){
Employee e = employees.get(i);
int id = e.getId();
String name = e.getName();
double salary = e.getSalary();
int age = e.getAge();
out.println("<tr><td>" + id
+ "</td><td>" + name
+ "</td><td>" + salary
+"</td><td>" + age
+ "</td><td>" +
"<a href='del?id="
+ id + "'>删除</a> " +
"<a href='load?id="
+ id + "'>修改</a></td></tr>");
}
out.println("</table>");
out.println("<a href='addEmp.html'>添加新员工</a>");
out.println("<a href='delAll'>" + "删除所有雇员</a>");
} catch (Exception e) {
e.printStackTrace();
out.println("系统繁忙,稍后重试");
}
}
}
(5)查询一条员工信息-->进行页面修改:LoadEmpServlet.java
package web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.Factory;
import dao.EmployeeDAO;
import entity.Employee;
/**
* 查询一条员工信息-->进行页面修改,为 UpdateEmpServlet进行数据库修改操作作准备
* @author luminal
*/
public class LoadEmpServlet extends HttpServlet{
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
response.setContentType(
"text/html;charset=utf-8");
PrintWriter out = response.getWriter();
int id = Integer.parseInt(request.getParameter("id"));
try {
EmployeeDAO dao =
(EmployeeDAO)Factory.getInstance(
"EmployeeDAO");
Employee e = dao.findById(id);
if(e != null){
String name = e.getName();
double salary = e.getSalary();
int age = e.getAge();
out.println("<form action='update?id=" + id + "' method='post'>");
out.println("id:" + id + "<br/>");
out.println("姓名:<input name='name' value='"
+ name + "'/><br/>");
out.println("薪水:<input name='salary' value='"
+ salary + "'/><br/>");
out.println("年龄:<input name='age' value='"
+ age + "'/><br/>");
out.println("<input type='submit' value='提交'/>");
out.println("</form>");
}
}catch(Exception e){
e.printStackTrace();
out.println("系统繁忙,稍后重试");
}
}
}
(6)修改员工信息-进行数据库修改操作:UpdateEmpServlet.java
package web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.Factory;
import dao.EmployeeDAO;
import entity.Employee;
/**
* 拿到 LoadEmpServlet提交修改的数据--->访问 mysql数据库,修改员工信息
* @author luminal
*/
public class UpdateEmpServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
double salary = Double.parseDouble(request.getParameter("salary"));
int age = Integer.parseInt(request.getParameter("age"));
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 将员工信息插入数据库
try {
EmployeeDAO dao =
(EmployeeDAO)Factory.getInstance("EmployeeDAO");
Employee e = new Employee();
e.setId(id);
e.setName(name);
e.setSalary(salary);
e.setAge(age);
dao.update(e);
response.sendRedirect("show");
} catch (Exception e) {
e.printStackTrace();
out.println("系统繁忙,稍后重试");
}
}
}
(7)step1,实体类--->entity包,Employee类(未修改-同上篇博文代码)
(8)step2,dao接口--->dao包,EmployeeDAO接口
package dao;
import java.util.List;
import entity.Employee;
/**
* 在该接口当中,声明一系列方法,
* 这些方法不要涉及任何具体的实现技术。
*/
public interface EmployeeDAO {
//public void save(Employee e)throws SQLException;//error
//public ResultSet findAllD(); //error
public List<Employee> findAll() throws Exception;
public void save(Employee e) throws Exception;
public void delete(int id) throws Exception;
public void deleteAllData()throws Exception;
public Employee findById(int id) throws Exception;
public void update(Employee e) throws Exception;
}
(9)step3,实现dao接口--->dao.jdbc包,实现类(增删改查)
package dao.jdbc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import util.DBUtil;
import dao.EmployeeDAO;
import entity.Employee;
/**
* 可以有多个类实现implements接口
* 这里EmployeeDAOImpl类,使用jdbc技术来实现数据库访问(增删改查)
*/
public class EmployeeDAOImpl implements EmployeeDAO{
/**
* 查询所有员工信息
*/
public List<Employee> findAll() throws Exception {
//JPA是Java Persistence API的简称,中文名Java持久层API,
//是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
//https://baike.baidu.com/item/JPA/5660672?fr=aladdin
System.out.println("使用jpa技术实现的查找方法...");
List<Employee> employees =
new ArrayList<Employee>();
Connection conn = null;
PreparedStatement prep = null;
ResultSet rst = null;
try{
conn = DBUtil.getConnection();
prep = conn.prepareStatement(
"select * from t_emp");
rst = prep.executeQuery();
while(rst.next()){
Employee e = new Employee();
e.setId(rst.getInt("id"));
e.setName(rst.getString("name"));
e.setSalary(rst.getDouble("salary"));
e.setAge(rst.getInt("age"));
employees.add(e);
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(rst != null){
rst.close();
}
if(prep != null){
prep.close();
}
DBUtil.close(conn);
}
return employees;
}
/**
* 添加新员工信息
*/
public void save(Employee e) throws Exception {
Connection conn = null;
PreparedStatement prep = null;
try{
conn = DBUtil.getConnection();
prep =
conn.prepareStatement("insert into " +
"t_emp(name,salary,age) " +
"values(?,?,?)");
prep.setString(1, e.getName());
prep.setDouble(2, e.getSalary());
prep.setInt(3, e.getAge());
prep.executeUpdate();
}catch(Exception e1){
e1.printStackTrace();
throw e1;
}finally{
if( prep != null){
prep.close();
}
DBUtil.close(conn);
}
}
/**
* 删除员工信息
*/
public void delete(int id) throws Exception {
Connection conn = null;
PreparedStatement prep = null;
try{
conn = DBUtil.getConnection();
prep =
conn.prepareStatement("delete from t_emp " +
"where id=?");
prep.setInt(1, id);
prep.executeUpdate();
}catch(Exception e1){
e1.printStackTrace();
throw e1;
}finally{
if( prep != null){
prep.close();
}
DBUtil.close(conn);
}
}
/**
* 删除所有员工信息
*/
public void deleteAllData() throws Exception {
Connection conn = null;
PreparedStatement prep = null;
try{
conn = DBUtil.getConnection();
prep = conn.prepareStatement("delete from t_emp ");
prep.executeUpdate();
}catch(Exception e1){
e1.printStackTrace();
throw e1;
}finally{
if( prep != null){
prep.close();
}
DBUtil.close(conn);
}
}
/**
* 查询指定某个员工信息
*/
public Employee findById(int id) throws Exception {
Employee e = null;
Connection conn = null;
PreparedStatement prep = null;
ResultSet rst = null;
try{
conn = DBUtil.getConnection();
prep = conn.prepareStatement(
"select * from t_emp where id=?");
prep.setInt(1, id);
rst = prep.executeQuery();
if(rst.next()){
e = new Employee();
e.setId(id);
e.setName(rst.getString("name"));
e.setSalary(rst.getDouble("salary"));
e.setAge(rst.getInt("age"));
}
}catch(Exception e1){
e1.printStackTrace();
}finally{
if(rst != null){
rst.close();
}
if(prep != null){
prep.close();
}
DBUtil.close(conn);
}
return e;
}
/**
* 更新员工信息
*/
public void update(Employee e) throws Exception {
Connection conn = null;
PreparedStatement prep = null;
try{
conn = DBUtil.getConnection();
prep =
conn.prepareStatement("update t_emp " +
"set name=?,salary=?,age=? where id=?");
prep.setString(1, e.getName());
prep.setDouble(2, e.getSalary());
prep.setInt(3, e.getAge());
prep.setInt(4, e.getId());
prep.executeUpdate();
}catch(Exception e1){
e1.printStackTrace();
throw e1;
}finally{
if( prep != null){
prep.close();
}
DBUtil.close(conn);
}
}
}
(10)step4,工厂--->util包,Factory类
(11)step5,封装数据库连接类--->util包,DBUtil类
(12)step6,配置文件--->util包,dao.properties
(13)step7,测试--->test包,TestCode类
上面这几个类未修改-同上篇博文代码,这里就不再重复贴代码了
3、运行程序-效果展示
启动tomact,部署web项目,在谷歌浏览器输入:http://localhost:8080/web09/show
经过验证测试,增删改查 都是成功的(看id就知道验证测试过了)。
那么就废话少说,不做说明了。如果不放心,你还可以一边操作,一边使用命令查看,如下图:
请别只做拿来主义者,如果觉得写的不错、对你有用,留下你的足迹:点赞 或 评论 支持下!
一直被模仿从未被超越,你们的支持是我们这些写博客博主们的动力!我们将继续分享干货!