人脸识别员工考勤管理系统——考勤Askoff(个人博客)
GIT代码
https://gitee.com/hjx127/javaweb
整体功能框架图
整体UML类图
Askoff的UML类图
Askoff实体类
属性
考勤开始时间
考勤结束时间
考勤状态
员工Id
部门Id
代码块
private String startime;
private String endtime;
private String status;
private int empId;
private int deptId;
AskoffDAO模块与方法实现
DAO模块
DAO接口
增加考勤信息: 通过传入一个新的员工考勤信息表新增一个考勤列表返回考勤信息表个数
删除考勤信息: 通过传入的员工Id(empId)删除该员工的考勤信息表返回考勤信息表个数
更新考勤信息: 通过传入员工新的考勤信息修改该员工的考勤信息表返回考勤信息表个数
查询一个员工的考勤信息: 通过传入的员工Id(empId)返回对应员工的考勤信息表
查询所有员工的考勤信息: 通过返回的所有考勤列表查询所有员工的考勤信息表
DAO模式代码块
public interface AskoffMapper {
//增加一个考勤
int addAskoff(Askoff askoff);
//删除一个考勤
int deleteAskoff(int empId);
//更新一个考勤
int updataAskoff(Askoff askoff);
//查询一个考勤
Askoff queryAskoffById(int empId);
//查询全部考勤
List<Askoff> queryAllAskoff();
}
使用DAO接口的优点
使用了DAO模式。使用了mybatis数据库连接池连接数据库,提高了数据库链接的性能。DAO层进行每个框架的增删改查然后将结果返回给Service(业务层)。Service与DAO层建立连接,DAO层与数据库进行连接。DAO层没有实现实现类,而是使用了.xml文件,在用户发送请求的时候对其进行相对应的操作。
方法实现
使用.xml文件对数据库操作从而实现了DAO接口的方法
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.com.dao.AskoffMapper">
<insert id="addAskoff" parameterType="Askoff">
insert into face_attendance.askoff(empId,deptId,startime,endtime,status)
values (#{empId},#{deptId},#{startime},#{endtime},#{status})
</insert>
<delete id="deleteAskoff" parameterType="int">
delete from face_attendance.askoff
where empId = #{empId}
</delete>
<update id="updataAskoff" parameterType="Askoff">
update face_attendance.askoff
set empId=#{empId},deptId=#{deptId},startime=#{startime},endtime=#{endtime},status=#{status}
where empId = #{empId}
</update>
<select id="queryAskoffById" resultType="Askoff">
select * from face_attendance.askoff
where empId = #{empId};
</select>
<select id="queryAllAskoff" resultType="Askoff">
select * from face_attendance.askoff
</select>
</mapper>
前端用户发送增删查改的请求: AskoffService以及AskoffServiceImpl
AskoffService
增加考勤信息: 通过传入一个新的员工考勤信息表新增一个考勤列表返回考勤信息表个数
删除考勤信息: 通过传入的员工Id(empId)删除该员工的考勤信息表返回考勤信息表个数
更新考勤信息: 通过传入员工新的考勤信息修改该员工的考勤信息表返回考勤信息表个数
查询一个员工的考勤信息: 通过传入的员工Id(empId)返回对应员工的考勤信息表
查询所有员工的考勤信息: 通过返回的所有考勤列表查询所有员工的考勤信息表
AskoffServiceImpl
AskoffServiceImp通过调用AskOffMapper调用.xml文件,对数据库操作从而实现了AskoffService接口的方法
具体代码
public interface AskoffService {
//增加一个考勤
int addAskoff(Askoff askoff);
//删除一个考勤
int deleteAskoff(int empId);
//更新一个考勤
int updataAskoff(Askoff askoff);
//查询一个考勤
Askoff queryAskoffById(int empId);
public List<Askoff> queryAllAskoff();
}
public class AskoffServiceImpl implements AskoffService {
private AskoffMapper askoffMapper;
public void setAskoffMapper(AskoffMapper askoffMapper) {
this.askoffMapper=askoffMapper;
}
@Override
public int addAskoff(Askoff askoff) {
// TODO Auto-generated method stub
return askoffMapper.addAskoff(askoff);
}
@Override
public int deleteAskoff(int empId) {
// TODO Auto-generated method stub
return askoffMapper.deleteAskoff(empId);
}
@Override
public int updataAskoff(Askoff askoff) {
// TODO Auto-generated method stub
return askoffMapper.updataAskoff(askoff);
}
@Override
public Askoff queryAskoffById(int empId) {
// TODO Auto-generated method stub
return askoffMapper.queryAskoffById(empId);
}
@Override
public List<Askoff> queryAllAskoff() {
// TODO Auto-generated method stub
return askoffMapper.queryAllAskoff();
}
}
前后端连接
使用Controller连接前后端
Controller与前端进行交互,将前后端进行连接,使用springMVC、使用Controller与前端进行交互,接受前端请求不用每一次都doget、 dopost,Controller 先访问一个网址,进行增删改查的功能实现,然后model.attribute 将从数据库查询的数据 放到前端显示出来,return则跳到某个页面网址。
具体代码
import cn.com.dto.Askoff;
import cn.com.dto.Employee;
import cn.com.service.AskoffService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("/fun2")
public class AskoffController {
@Autowired
@Qualifier("AskoffServiceImpl")
private AskoffService askoffService;
//查询所有考勤
@RequestMapping("/askoff_mg")
public String list(Model model) {
System.out.println("askoff_mg");
List<Askoff> list=askoffService.queryAllAskoff();
model.addAttribute("list",list);
return "askoff_mg";
}
//跳转到增加考勤页面
@RequestMapping("/toAddAskoff")
public String toAddAskoff() {return "addAskoff";}
//添加考勤的请求
@RequestMapping("/addAskoff")
public String addAskoff(Askoff askoff) {
askoffService.addAskoff(askoff);
return "redirect:/fun2/askoff_mg";
}
//跳转到修改考勤页面
@RequestMapping("/toUpdate")
public String toUpdateAskoff(Integer empid,Model model) {
Askoff askoff=askoffService.queryAskoffById(empid);
model.addAttribute("Qaskoff",askoff);
return "updateAskoff";
}
//修改考勤信息
@RequestMapping("/updateAskoff")
public String updateAskoff(Askoff askoff) {
askoffService.updataAskoff(askoff);
System.out.println("增加一条考勤信息"+askoff);
return "redirect:/fun2/askoff_mg";
}
//删除
@RequestMapping("/delAskoff")
public String deleteAskoff(Integer empid) {
askoffService.deleteAskoff(empid);
return "redirect:/fun2/askoff_mg";
}
//查询
@RequestMapping("/queryAskoff")
public String list(Integer empId, Model model) {
Askoff askoff= askoffService.queryAskoffById(empId);
List<Askoff>list=new ArrayList<Askoff>();
list.add(askoff);
if(askoff==null){
model.addAttribute("error","未查到");
}
model.addAttribute("list",list);
return "askoff_mg";
}
}
数据库连接
采用MySQL数据库进行存放数据,数据库存放三张表:考勤表、员工表、部门表.