first commit

This commit is contained in:
2024-12-06 09:53:30 +08:00
commit a3e2a782ea
22 changed files with 2023 additions and 0 deletions

43
src/dao/BaseDAO.java Normal file
View File

@@ -0,0 +1,43 @@
package dao;
import java.util.List;
/**
* 基础DAO接口定义通用的CRUD操作
* @param <T> 实体类型
*/
public interface BaseDAO<T> {
/**
* 插入一条记录
* @param entity 实体对象
* @return 影响的行数
*/
int insert(T entity);
/**
* 根据ID删除记录
* @param id 主键ID
* @return 影响的行数
*/
int deleteById(int id);
/**
* 更新记录
* @param entity 实体对象
* @return 影响的行数
*/
int update(T entity);
/**
* 根据ID查询记录
* @param id 主键ID
* @return 实体对象
*/
T findById(int id);
/**
* 查询所有记录
* @return 实体对象列表
*/
List<T> findAll();
}

38
src/dao/DAOFactory.java Normal file
View File

@@ -0,0 +1,38 @@
package dao;
import dao.impl.StudentDAOImpl;
import dao.impl.TeacherDAOImpl;
import dao.impl.LeaveRequestDAOImpl;
/**
* DAO工厂类用于获取各种DAO的实例
*/
public class DAOFactory {
private static final StudentDAO studentDAO = new StudentDAOImpl();
private static final TeacherDAO teacherDAO = new TeacherDAOImpl();
private static final LeaveRequestDAO leaveRequestDAO = new LeaveRequestDAOImpl();
/**
* 获取StudentDAO实例
* @return StudentDAO实例
*/
public static StudentDAO getStudentDAO() {
return studentDAO;
}
/**
* 获取TeacherDAO实例
* @return TeacherDAO实例
*/
public static TeacherDAO getTeacherDAO() {
return teacherDAO;
}
/**
* 获取LeaveRequestDAO实例
* @return LeaveRequestDAO实例
*/
public static LeaveRequestDAO getLeaveRequestDAO() {
return leaveRequestDAO;
}
}

View File

@@ -0,0 +1,35 @@
package dao;
import model.LeaveRequest;
import model.ApprovalStatus;
import java.util.Date;
import java.util.List;
/**
* 请假申请DAO接口
*/
public interface LeaveRequestDAO extends BaseDAO<LeaveRequest> {
/**
* 根据学生ID查询请假记录
* @param studentId 学生ID
* @return 请假记录列表
*/
List<LeaveRequest> findByStudentId(int studentId);
/**
* 根据审批状态查询请假记录
* @param status 审批状态
* @return 请假记录列表
*/
List<LeaveRequest> findByStatus(ApprovalStatus status);
/**
* 更新请假申请状态
* @param id 请假申请ID
* @param status 新状态
* @param approverComment 审批意见
* @return 影响的行数
*/
int updateStatus(int id, ApprovalStatus status, String approverComment);
}

30
src/dao/StudentDAO.java Normal file
View File

@@ -0,0 +1,30 @@
package dao;
import model.Student;
import java.util.List;
/**
* 学生DAO接口
*/
public interface StudentDAO extends BaseDAO<Student> {
/**
* 根据学号查询学生
* @param studentId 学号
* @return 学生对象
*/
Student findByStudentId(String studentId);
/**
* 根据班级查询学生列表
* @param className 班级名称
* @return 学生列表
*/
List<Student> findByClassName(String className);
/**
* 根据姓名模糊查询学生
* @param name 学生姓名
* @return 学生列表
*/
List<Student> findByNameLike(String name);
}

30
src/dao/TeacherDAO.java Normal file
View File

@@ -0,0 +1,30 @@
package dao;
import model.Teacher;
import java.util.List;
/**
* 教师DAO接口
*/
public interface TeacherDAO extends BaseDAO<Teacher> {
/**
* 根据工号查询教师
* @param teacherId 教师工号
* @return 教师对象
*/
Teacher findByTeacherId(String teacherId);
/**
* 根据部门查询教师列表
* @param department 部门名称
* @return 教师列表
*/
List<Teacher> findByDepartment(String department);
/**
* 根据姓名模糊查询教师
* @param name 教师姓名
* @return 教师列表
*/
List<Teacher> findByNameLike(String name);
}

View File

@@ -0,0 +1,227 @@
package dao.impl;
import dao.LeaveRequestDAO;
import model.ApprovalStatus;
import model.LeaveRequest;
import model.Student;
import model.Teacher;
import util.DatabaseUtil;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class LeaveRequestDAOImpl implements LeaveRequestDAO {
private final StudentDAOImpl studentDAO = new StudentDAOImpl();
private final TeacherDAOImpl teacherDAO = new TeacherDAOImpl();
@Override
public int insert(LeaveRequest request) {
String sql = "INSERT INTO leave_requests (student_id, start_time, end_time, status, " +
"duration, location, reason_type, reason_detail, is_leaving_city, " +
"special_situation, request_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
stmt.setInt(1, request.getStudent().getId());
stmt.setTimestamp(2, new Timestamp(request.getStartTime().getTime()));
stmt.setTimestamp(3, new Timestamp(request.getEndTime().getTime()));
stmt.setString(4, request.getStatus().name());
stmt.setDouble(5, request.getDuration());
stmt.setString(6, request.getLocation());
stmt.setString(7, request.getReasonType());
stmt.setString(8, request.getReasonDetail());
stmt.setBoolean(9, request.isLeavingCity());
stmt.setString(10, request.getSpecialSituation());
stmt.setTimestamp(11, new Timestamp(request.getRequestTime().getTime()));
int affectedRows = stmt.executeUpdate();
if (affectedRows == 0) {
return 0;
}
try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
if (generatedKeys.next()) {
request.setId(generatedKeys.getInt(1));
}
}
return affectedRows;
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
}
@Override
public int deleteById(int id) {
String sql = "DELETE FROM leave_requests WHERE id = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, id);
return stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
}
@Override
public int update(LeaveRequest request) {
String sql = "UPDATE leave_requests SET student_id = ?, start_time = ?, " +
"end_time = ?, status = ?, duration = ?, location = ?, " +
"reason_type = ?, reason_detail = ?, is_leaving_city = ?, " +
"special_situation = ?, request_time = ? WHERE id = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, request.getStudent().getId());
stmt.setTimestamp(2, new Timestamp(request.getStartTime().getTime()));
stmt.setTimestamp(3, new Timestamp(request.getEndTime().getTime()));
stmt.setString(4, request.getStatus().name());
stmt.setDouble(5, request.getDuration());
stmt.setString(6, request.getLocation());
stmt.setString(7, request.getReasonType());
stmt.setString(8, request.getReasonDetail());
stmt.setBoolean(9, request.isLeavingCity());
stmt.setString(10, request.getSpecialSituation());
stmt.setTimestamp(11, new Timestamp(request.getRequestTime().getTime()));
stmt.setInt(12, request.getId());
return stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
}
@Override
public LeaveRequest findById(int id) {
String sql = "SELECT lr.*, s.* FROM leave_requests lr " +
"JOIN students s ON lr.student_id = s.id " +
"WHERE lr.id = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, id);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
return mapResultSetToLeaveRequest(rs);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public List<LeaveRequest> findAll() {
List<LeaveRequest> requests = new ArrayList<>();
String sql = "SELECT lr.*, s.* FROM leave_requests lr " +
"JOIN students s ON lr.student_id = s.id";
try (Connection conn = DatabaseUtil.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
requests.add(mapResultSetToLeaveRequest(rs));
}
} catch (SQLException e) {
e.printStackTrace();
}
return requests;
}
@Override
public List<LeaveRequest> findByStudentId(int studentId) {
List<LeaveRequest> requests = new ArrayList<>();
String sql = "SELECT lr.*, s.* FROM leave_requests lr " +
"JOIN students s ON lr.student_id = s.id " +
"WHERE lr.student_id = ? ORDER BY lr.request_time DESC";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, studentId);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
requests.add(mapResultSetToLeaveRequest(rs));
}
} catch (SQLException e) {
e.printStackTrace();
}
return requests;
}
@Override
public List<LeaveRequest> findByStatus(ApprovalStatus status) {
List<LeaveRequest> requests = new ArrayList<>();
String sql = "SELECT lr.*, s.* FROM leave_requests lr " +
"JOIN students s ON lr.student_id = s.id " +
"WHERE lr.status = ? ORDER BY lr.request_time DESC";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, status.name());
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
requests.add(mapResultSetToLeaveRequest(rs));
}
} catch (SQLException e) {
e.printStackTrace();
}
return requests;
}
@Override
public int updateStatus(int requestId, ApprovalStatus status, String comment) {
String sql = "UPDATE leave_requests SET status = ?, approval_comment = ?, approval_time = ? WHERE id = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, status.name());
stmt.setString(2, comment);
stmt.setTimestamp(3, new Timestamp(System.currentTimeMillis()));
stmt.setInt(4, requestId);
return stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
}
private LeaveRequest mapResultSetToLeaveRequest(ResultSet rs) throws SQLException {
LeaveRequest request = new LeaveRequest();
request.setId(rs.getInt("id"));
request.setLocation(rs.getString("location"));
request.setStartTime(rs.getTimestamp("start_time"));
request.setEndTime(rs.getTimestamp("end_time"));
request.setStatus(ApprovalStatus.valueOf(rs.getString("status")));
request.setDuration(rs.getDouble("duration"));
request.setReasonType(rs.getString("reason_type"));
request.setReasonDetail(rs.getString("reason_detail"));
request.setLeavingCity(rs.getBoolean("is_leaving_city"));
request.setSpecialSituation(rs.getString("special_situation"));
request.setRequestTime(rs.getTimestamp("request_time"));
// 设置学生信息
Student student = new Student();
student.setId(rs.getInt("student_id"));
student.setStudentId(rs.getString("student_id"));
student.setName(rs.getString("name"));
student.setClassName(rs.getString("class_name"));
student.setContact(rs.getString("contact"));
request.setStudent(student);
Timestamp approvalTime = rs.getTimestamp("approval_time");
if (approvalTime != null) {
request.setApprovalTime(approvalTime);
}
return request;
}
}

View File

@@ -0,0 +1,189 @@
package dao.impl;
import dao.StudentDAO;
import model.Student;
import util.DatabaseUtil;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* StudentDAO实现类
*/
public class StudentDAOImpl implements StudentDAO {
@Override
public int insert(Student student) {
String sql = "INSERT INTO students (student_id, name, class_name, contact, college, major, is_graduating) VALUES (?, ?, ?, ?, ?, ?, ?)";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
stmt.setString(1, student.getStudentId());
stmt.setString(2, student.getName());
stmt.setString(3, student.getClassName());
stmt.setString(4, student.getContact());
stmt.setString(5, student.getCollege());
stmt.setString(6, student.getMajor());
stmt.setBoolean(7, student.isGraduating());
int affectedRows = stmt.executeUpdate();
if (affectedRows == 0) {
return 0;
}
try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
if (generatedKeys.next()) {
student.setId(generatedKeys.getInt(1));
}
}
return affectedRows;
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
}
@Override
public int deleteById(int id) {
String sql = "DELETE FROM students WHERE id = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, id);
return stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
}
@Override
public int update(Student student) {
String sql = "UPDATE students SET student_id = ?, name = ?, class_name = ?, contact = ?, college = ?, major = ?, is_graduating = ? WHERE id = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, student.getStudentId());
stmt.setString(2, student.getName());
stmt.setString(3, student.getClassName());
stmt.setString(4, student.getContact());
stmt.setString(5, student.getCollege());
stmt.setString(6, student.getMajor());
stmt.setBoolean(7, student.isGraduating());
stmt.setInt(8, student.getId());
return stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
}
@Override
public Student findById(int id) {
String sql = "SELECT * FROM students WHERE id = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, id);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
return mapResultSetToStudent(rs);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public List<Student> findAll() {
List<Student> students = new ArrayList<>();
String sql = "SELECT * FROM students";
try (Connection conn = DatabaseUtil.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
students.add(mapResultSetToStudent(rs));
}
} catch (SQLException e) {
e.printStackTrace();
}
return students;
}
@Override
public Student findByStudentId(String studentId) {
String sql = "SELECT * FROM students WHERE student_id = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, studentId);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
return mapResultSetToStudent(rs);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public List<Student> findByClassName(String className) {
List<Student> students = new ArrayList<>();
String sql = "SELECT * FROM students WHERE class_name = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, className);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
students.add(mapResultSetToStudent(rs));
}
} catch (SQLException e) {
e.printStackTrace();
}
return students;
}
@Override
public List<Student> findByNameLike(String name) {
List<Student> students = new ArrayList<>();
String sql = "SELECT * FROM students WHERE name LIKE ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, "%" + name + "%");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
students.add(mapResultSetToStudent(rs));
}
} catch (SQLException e) {
e.printStackTrace();
}
return students;
}
/**
* 将ResultSet映射为Student对象
*/
private Student mapResultSetToStudent(ResultSet rs) throws SQLException {
Student student = new Student();
student.setId(rs.getInt("id"));
student.setStudentId(rs.getString("student_id"));
student.setName(rs.getString("name"));
student.setClassName(rs.getString("class_name"));
student.setContact(rs.getString("contact"));
student.setCollege(rs.getString("college"));
student.setMajor(rs.getString("major"));
student.setGraduating(rs.getBoolean("is_graduating"));
return student;
}
}

View File

@@ -0,0 +1,180 @@
package dao.impl;
import dao.TeacherDAO;
import model.Teacher;
import util.DatabaseUtil;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* TeacherDAO实现类
*/
public class TeacherDAOImpl implements TeacherDAO {
@Override
public int insert(Teacher teacher) {
String sql = "INSERT INTO teachers (teacher_id, name, department, contact) VALUES (?, ?, ?, ?)";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
stmt.setString(1, teacher.getTeacherId());
stmt.setString(2, teacher.getName());
stmt.setString(3, teacher.getDepartment());
stmt.setString(4, teacher.getContact());
int affectedRows = stmt.executeUpdate();
if (affectedRows == 0) {
return 0;
}
try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
if (generatedKeys.next()) {
teacher.setId(generatedKeys.getInt(1));
}
}
return affectedRows;
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
}
@Override
public int deleteById(int id) {
String sql = "DELETE FROM teachers WHERE id = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, id);
return stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
}
@Override
public int update(Teacher teacher) {
String sql = "UPDATE teachers SET teacher_id = ?, name = ?, department = ?, contact = ? WHERE id = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, teacher.getTeacherId());
stmt.setString(2, teacher.getName());
stmt.setString(3, teacher.getDepartment());
stmt.setString(4, teacher.getContact());
stmt.setInt(5, teacher.getId());
return stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
}
@Override
public Teacher findById(int id) {
String sql = "SELECT * FROM teachers WHERE id = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, id);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
return mapResultSetToTeacher(rs);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public List<Teacher> findAll() {
List<Teacher> teachers = new ArrayList<>();
String sql = "SELECT * FROM teachers";
try (Connection conn = DatabaseUtil.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
teachers.add(mapResultSetToTeacher(rs));
}
} catch (SQLException e) {
e.printStackTrace();
}
return teachers;
}
@Override
public Teacher findByTeacherId(String teacherId) {
String sql = "SELECT * FROM teachers WHERE teacher_id = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, teacherId);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
return mapResultSetToTeacher(rs);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public List<Teacher> findByDepartment(String department) {
List<Teacher> teachers = new ArrayList<>();
String sql = "SELECT * FROM teachers WHERE department = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, department);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
teachers.add(mapResultSetToTeacher(rs));
}
} catch (SQLException e) {
e.printStackTrace();
}
return teachers;
}
@Override
public List<Teacher> findByNameLike(String name) {
List<Teacher> teachers = new ArrayList<>();
String sql = "SELECT * FROM teachers WHERE name LIKE ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, "%" + name + "%");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
teachers.add(mapResultSetToTeacher(rs));
}
} catch (SQLException e) {
e.printStackTrace();
}
return teachers;
}
/**
* 将ResultSet映射为Teacher对象
*/
private Teacher mapResultSetToTeacher(ResultSet rs) throws SQLException {
Teacher teacher = new Teacher();
teacher.setId(rs.getInt("id"));
teacher.setTeacherId(rs.getString("teacher_id"));
teacher.setName(rs.getString("name"));
teacher.setDepartment(rs.getString("department"));
teacher.setContact(rs.getString("contact"));
return teacher;
}
}