java服务器端开发-servlet:4_2、dao模式_工厂模式_“增删改查”员工信息

声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!!

目录

一、前言

二、dao模式_工厂模式_“增删改查”员工信息

1、比较使用dao、工厂模式后的代码

2、修改后的“增删改查”员工信息的代码

(1)增加员工信息:AddEmpServlet.java

(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类

3、运行程序-效果展示


一、前言

上一篇文章我们:演示体会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>&nbsp;" +
								"<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就知道验证测试过了)。

那么就废话少说,不做说明了。如果不放心,你还可以一边操作,一边使用命令查看,如下图:

 

请别只做拿来主义者,如果觉得写的不错、对你有用,留下你的足迹:点赞 或 评论 支持下!

一直被模仿从未被超越,你们的支持是我们这些写博客博主们的动力!我们将继续分享干货!

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被开发耽误的大厨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值