答案:基于Spring Boot、MySQL和Thymeleaf构建打卡系统,实现用户登录、上下班打卡、防重打卡、记录查询及管理员查看功能。通过User和AttendanceRecord实体管理用户与考勤数据,利用唯一约束防止重复打卡,结合MyBatis完成数据操作,使用Session进行简单认证,并通过前端页面实现交互,支持密码加密、登录拦截与考勤统计扩展。

开发一个简易的打卡签到系统,核心目标是记录用户每日的上下班时间,并提供基本的数据查询和管理功能。使用Java可以很好地实现这一需求,结合Spring Boot、MySQL和简单的前端页面,快速搭建一个可运行的原型系统。
一个基础的打卡签到系统应包含以下功能:
采用主流Java Web技术栈,简化开发流程:
src/ ├── main/ │ ├── java/ │ │ └── com.example.attendance/ │ │ ├── AttendanceApplication.java │ │ ├── controller/ UserController, AttendanceController │ │ ├── service/ UserService, AttendanceService │ │ ├── mapper/ UserMapper, AttendanceMapper │ │ ├── entity/ User, AttendanceRecord │ │ └── config/ WebSecurityConfig │ ├── resources/ │ │ ├── application.yml │ │ ├── mapper/*.xml │ │ └── templates/*.html
创建两张核心表:
立即学习“Java免费学习笔记(深入)”;
用户表(user)
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(100) NOT NULL,
role ENUM('EMPLOYEE', 'ADMIN') DEFAULT 'EMPLOYEE'
);
CREATE TABLE attendance_record ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, date DATE NOT NULL, check_in_time DATETIME, check_out_time DATETIME, FOREIGN KEY (user_id) REFERENCES user(id), UNIQUE(user_id, date) );
注意:通过 unique 约束确保每天只能有一条打卡记录。
以 Spring Boot + MyBatis 为例,展示关键逻辑。
实体类示例:
public class AttendanceRecord {
private Integer id;
private Integer userId;
private LocalDate date;
private LocalDateTime checkInTime;
private LocalDateTime checkOutTime;
// getter/setter
}
在 AttendanceService 中实现打卡判断:
public String checkIn(Integer userId) {
LocalDate today = LocalDate.now();
AttendanceRecord record = attendanceMapper.findByUserIdAndDate(userId, today);
if (record == null) {
// 首次打卡,创建新记录
record = new AttendanceRecord();
record.setUserId(userId);
record.setDate(today);
record.setCheckInTime(LocalDateTime.now());
attendanceMapper.insert(record);
return "上班打卡成功";
} else if (record.getCheckInTime() == null) {
// 补打卡(上班)
record.setCheckInTime(LocalDateTime.now());
attendanceMapper.update(record);
return "上班补卡成功";
} else {
return "今天已打过上班卡,无需重复打卡";
}
}
@PostMapping("/checkin")
public String checkIn(HttpSession session, Model model) {
Integer userId = (Integer) session.getAttribute("userId");
if (userId == null) {
return "redirect:/login";
}
String result = attendanceService.checkIn(userId);
model.addAttribute("msg", result);
return "check_result";
}
使用 Thymeleaf 搭建简单页面:
关键点:每次打卡前检查是否已存在当天记录,前端可配合显示“已打卡”提示。
以上就是Java里如何开发简易打卡签到系统_打卡签到项目实战解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号