• 人脸识别员工考勤管理系统——考勤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数据库进行存放数据,数据库存放三张表:考勤表、员工表、部门表.

  • 相关阅读:
    Redis 中如何保证数据的不丢失,Redis 中的持久化是如何进行的
    Redis 中的 set 和 sorted set 如何使用,源码实现分析
    Redis 中使用 list,streams,pub/sub 几种方式实现消息队列
    Redis 中 String 类型的内存开销比较大
    为什么 Redis 的查询很快, Redis 如何保证查询的高效
    Redis 中常见的集群部署方案
    2021 年终总结
    linux挂载大于2T的移动硬盘
    maven编译报错
    Docker命令详解
  • 原文地址:https://www.cnblogs.com/springxinxin/p/14342442.html
Copyright © 2020-2023  润新知