DAO模式属于工厂模式的一种,而工厂模式是指定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
在使用Java开发M2人脸识别打卡项目中,需要将员工的面部信息储存在数据库中,以便在进行人脸打卡的过程中实时调用并对比。该项目用到了MySQl和SQL lite这两种数据库。这两者在对于某些数据的增删查改方面的细节有所不同,所以需要分开撰写其数据库连接的代码。
在日后使用该程序的过程中,可能会选择这两种数据库中的任意一种,这时候就需要对源代码进行更改。使用DAO模式则可以大大的简化更改代码这一步骤,具体实现的细节如下:
创建一个DAO包
创建一个名为com.mr.clock.dao的包
创建一个接口
创建一个名为dao的interface
package com.mr.clock.dao;
import java.util.Date;
import java.util.Set;
import com.mr.clock.pojo.Employee;
import com.mr.clock.pojo.User;
import com.mr.clock.pojo.WorkTime;
public interface DAO {
/**
* *获取所有员工
* @return所有员工对象集合
*/
public Set<Employee> getALLEmp();
/*
* 根据员工编号获取员工对象
* @param id 员工编号
* @return 具体员工对象
*/
public Employee getEmp(int id);
/*
* 根据员工吗获取员工对象
* @param code 特征码
* @return 具体员工对象
*/
public Employee getEmp(String code);
/*
* 添加新员工
* @param e 新员工对象
*/
public void addEmp(Employee e);
/*
* 删除指定员工
* @param e id 员工编号
*/
public void deleteEmp(Integer id);
/*获取作息时间
*@ Return作息时间对象
*/
public WorkTime getWorkTime();
/*更新作息时间
@param time
*/
public void updateWorkTime(WorkTime time);
/*指定员工添加打卡记录
*@param empID员工编号
*@param now打卡日期
*/
public void addCLockInRecord(int empID, Date now);
/*删除指定员工所有打卡记录
@param emID员工编号
*/
public void deleteClockInRecord(int empID);
/*
*获取所有员工的打卡记录
*@Return左索引记录员工编号,右索引记录打卡日期
*/
public String[][] getAllClockInRecord();
/*验证管理员登录
*@param user管理员账号
*@Return如果账号密码正确,则返回rue,否则返回false
*/
public boolean userLogin(User user);
}
MySQl对接口的实现
包中的DAOMysqlimpl文件中定义了DAOMysqlImpl类,实现了DAO接口,代码如下:
package com.mr.clock.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import com.mr.clock.pojo.Employee;
import com.mr.clock.pojo.User;
import com.mr.clock.pojo.WorkTime;
import com.mr.clock.util.JDBCUtil;
public class DAOMysqlImpl implements DAO{
private Statement stmt;
private Connection con;
private PreparedStatement ps;
private ResultSet rs;
@Override
public Set<Employee> getALLEmp