文档:增加详细注释

This commit is contained in:
seahi 2024-12-18 11:19:00 +08:00
parent a7825643a7
commit 0aad1d1271
3 changed files with 180 additions and 34 deletions

View File

@ -10,7 +10,20 @@ import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* LeaveRequestDAO接口的实现类提供请假申请的数据库访问操作
* 实现了LeaveRequestDAO接口定义的所有方法包括基础的CRUD操作和特定的查询方法
* 处理请假申请的创建更新查询等操作支持按学生状态等条件进行查询
*/
public class LeaveRequestDAOImpl implements LeaveRequestDAO {
/**
* 插入一条请假申请记录
* 将LeaveRequest对象的信息保存到数据库中并获取生成的主键ID
*
* @param request 要插入的请假申请对象包含申请的详细信息
* @return 影响的行数插入成功返回1失败返回0
*/
@Override
public int insert(LeaveRequest request) {
String sql = "INSERT INTO leave_requests (student_id, start_time, end_time, status, " +
@ -20,6 +33,7 @@ public class LeaveRequestDAOImpl implements LeaveRequestDAO {
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()));
@ -36,6 +50,7 @@ public class LeaveRequestDAOImpl implements LeaveRequestDAO {
return 0;
}
// 获取自动生成的主键
try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
if (generatedKeys.next()) {
request.setId(generatedKeys.getInt(1));
@ -48,6 +63,12 @@ public class LeaveRequestDAOImpl implements LeaveRequestDAO {
}
}
/**
* 根据ID删除请假申请记录
*
* @param id 要删除的请假申请记录的ID
* @return 影响的行数删除成功返回1失败返回0
*/
@Override
public int deleteById(int id) {
String sql = "DELETE FROM leave_requests WHERE id = ?";
@ -62,6 +83,13 @@ public class LeaveRequestDAOImpl implements LeaveRequestDAO {
}
}
/**
* 更新请假申请信息
* 根据请假申请对象的ID更新其他字段的值
*
* @param request 包含更新信息的请假申请对象
* @return 影响的行数更新成功返回1失败返回0
*/
@Override
public int update(LeaveRequest request) {
String sql = "UPDATE leave_requests SET student_id = ?, start_time = ?, " +
@ -71,6 +99,7 @@ public class LeaveRequestDAOImpl implements LeaveRequestDAO {
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()));
@ -90,6 +119,13 @@ public class LeaveRequestDAOImpl implements LeaveRequestDAO {
}
}
/**
* 根据ID查询请假申请信息
* 同时会关联查询学生信息
*
* @param id 要查询的请假申请ID
* @return 如果找到则返回请假申请对象否则返回null
*/
@Override
public LeaveRequest findById(int id) {
String sql = "SELECT lr.*, s.id as student_id, s.student_id as student_number, " +
@ -112,6 +148,12 @@ public class LeaveRequestDAOImpl implements LeaveRequestDAO {
return null;
}
/**
* 查询所有请假申请记录
* 同时会关联查询每条记录对应的学生信息
*
* @return 包含所有请假申请对象的列表如果没有记录则返回空列表
*/
@Override
public List<LeaveRequest> findAll() {
List<LeaveRequest> requests = new ArrayList<>();
@ -132,6 +174,13 @@ public class LeaveRequestDAOImpl implements LeaveRequestDAO {
return requests;
}
/**
* 查询指定学生的所有请假申请记录
* 按请求时间降序排序
*
* @param studentId 学生的ID
* @return 该学生的所有请假申请列表如果没有记录则返回空列表
*/
@Override
public List<LeaveRequest> findByStudentId(int studentId) {
List<LeaveRequest> requests = new ArrayList<>();
@ -155,6 +204,12 @@ public class LeaveRequestDAOImpl implements LeaveRequestDAO {
return requests;
}
/**
* 查询指定状态的所有请假申请记录
*
* @param status 请假申请的状态
* @return 符合状态条件的请假申请列表如果没有记录则返回空列表
*/
@Override
public List<LeaveRequest> findByStatus(ApprovalStatus status) {
List<LeaveRequest> requests = new ArrayList<>();
@ -178,38 +233,16 @@ public class LeaveRequestDAOImpl implements LeaveRequestDAO {
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;
}
}
/**
* 将ResultSet映射为LeaveRequest对象
* 从结果集中提取数据并创建LeaveRequest实例同时创建关联的Student对象
*
* @param rs 包含请假申请和学生数据的ResultSet对象
* @return 映射后的LeaveRequest对象
* @throws SQLException 如果访问ResultSet时发生错误
*/
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.setRequestTime(rs.getTimestamp("request_time"));
// 设置学生信息
// 创建学生对象
Student student = new Student();
student.setId(rs.getInt("student_id"));
student.setStudentId(rs.getString("student_number"));
@ -218,8 +251,21 @@ public class LeaveRequestDAOImpl implements LeaveRequestDAO {
student.setContact(rs.getString("contact"));
student.setCollege(rs.getString("college"));
student.setMajor(rs.getString("major"));
request.setStudent(student);
// 创建请假申请对象
LeaveRequest request = new LeaveRequest();
request.setId(rs.getInt("id"));
request.setStudent(student);
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.setLocation(rs.getString("location"));
request.setReasonType(rs.getString("reason_type"));
request.setReasonDetail(rs.getString("reason_detail"));
request.setLeavingCity(rs.getBoolean("is_leaving_city"));
request.setRequestTime(rs.getTimestamp("request_time"));
Timestamp approvalTime = rs.getTimestamp("approval_time");
if (approvalTime != null) {
request.setApprovalTime(approvalTime);

View File

@ -9,16 +9,26 @@ import java.util.ArrayList;
import java.util.List;
/**
* StudentDAO实现类
* StudentDAO接口的实现类提供对学生数据的访问操作
* 实现了StudentDAO接口定义的所有方法包括基础的CRUD操作和特定的查询方法
* 使用JDBC与数据库进行交互所有数据库操作都包含适当的异常处理
*/
public class StudentDAOImpl implements StudentDAO {
/**
* 插入一条学生记录
* 将Student对象的信息保存到数据库中并获取生成的主键ID
*
* @param student 要插入的学生对象包含学生的详细信息
* @return 影响的行数插入成功返回1失败返回0
*/
@Override
public int insert(Student student) {
String sql = "INSERT INTO students (student_id, name, class_name, contact, college, major, password) 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());
@ -32,6 +42,7 @@ public class StudentDAOImpl implements StudentDAO {
return 0;
}
// 获取自动生成的主键
try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
if (generatedKeys.next()) {
student.setId(generatedKeys.getInt(1));
@ -44,6 +55,12 @@ public class StudentDAOImpl implements StudentDAO {
}
}
/**
* 根据ID删除学生记录
*
* @param id 要删除的学生记录的ID
* @return 影响的行数删除成功返回1失败返回0
*/
@Override
public int deleteById(int id) {
String sql = "DELETE FROM students WHERE id = ?";
@ -58,12 +75,20 @@ public class StudentDAOImpl implements StudentDAO {
}
}
/**
* 更新学生信息
* 根据学生对象的ID更新其他字段的值
*
* @param student 包含更新信息的学生对象
* @return 影响的行数更新成功返回1失败返回0
*/
@Override
public int update(Student student) {
String sql = "UPDATE students SET student_id = ?, name = ?, class_name = ?, contact = ?, college = ?, major = ?, password = ? 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());
@ -80,6 +105,12 @@ public class StudentDAOImpl implements StudentDAO {
}
}
/**
* 根据ID查询学生信息
*
* @param id 要查询的学生ID
* @return 如果找到则返回学生对象否则返回null
*/
@Override
public Student findById(int id) {
String sql = "SELECT * FROM students WHERE id = ?";
@ -98,6 +129,11 @@ public class StudentDAOImpl implements StudentDAO {
return null;
}
/**
* 查询所有学生记录
*
* @return 包含所有学生对象的列表如果没有记录则返回空列表
*/
@Override
public List<Student> findAll() {
List<Student> students = new ArrayList<>();
@ -115,6 +151,12 @@ public class StudentDAOImpl implements StudentDAO {
return students;
}
/**
* 根据学号查询学生信息
*
* @param studentId 要查询的学号
* @return 如果找到则返回学生对象否则返回null
*/
@Override
public Student findByStudentId(String studentId) {
String sql = "SELECT * FROM students WHERE student_id = ?";
@ -133,6 +175,12 @@ public class StudentDAOImpl implements StudentDAO {
return null;
}
/**
* 根据姓名模糊查询学生信息
*
* @param name 要查询的学生姓名支持模糊查询
* @return 符合条件的学生对象列表如果没有匹配则返回空列表
*/
@Override
public List<Student> findByNameLike(String name) {
List<Student> students = new ArrayList<>();
@ -154,6 +202,11 @@ public class StudentDAOImpl implements StudentDAO {
/**
* 将ResultSet映射为Student对象
* 从结果集中提取数据并创建Student实例
*
* @param rs 包含学生数据的ResultSet对象
* @return 映射后的Student对象
* @throws SQLException 如果访问ResultSet时发生错误
*/
private Student mapResultSetToStudent(ResultSet rs) throws SQLException {
Student student = new Student();

View File

@ -9,16 +9,26 @@ import java.util.ArrayList;
import java.util.List;
/**
* TeacherDAO实现类
* TeacherDAO接口的实现类提供教师数据的数据库访问操作
* 实现了TeacherDAO接口定义的所有方法包括基础的CRUD操作和特定的查询方法
* 使用JDBC与数据库进行交互所有数据库操作都包含适当的异常处理
*/
public class TeacherDAOImpl implements TeacherDAO {
/**
* 插入一条教师记录
* 将Teacher对象的信息保存到数据库中并获取生成的主键ID
*
* @param teacher 要插入的教师对象包含教师的详细信息
* @return 影响的行数插入成功返回1失败返回0
*/
@Override
public int insert(Teacher teacher) {
String sql = "INSERT INTO teachers (teacher_id, name, department, contact, password) 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());
@ -30,6 +40,7 @@ public class TeacherDAOImpl implements TeacherDAO {
return 0;
}
// 获取自动生成的主键
try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
if (generatedKeys.next()) {
teacher.setId(generatedKeys.getInt(1));
@ -42,6 +53,12 @@ public class TeacherDAOImpl implements TeacherDAO {
}
}
/**
* 根据ID删除教师记录
*
* @param id 要删除的教师记录的ID
* @return 影响的行数删除成功返回1失败返回0
*/
@Override
public int deleteById(int id) {
String sql = "DELETE FROM teachers WHERE id = ?";
@ -56,12 +73,20 @@ public class TeacherDAOImpl implements TeacherDAO {
}
}
/**
* 更新教师信息
* 根据教师对象的ID更新其他字段的值
*
* @param teacher 包含更新信息的教师对象
* @return 影响的行数更新成功返回1失败返回0
*/
@Override
public int update(Teacher teacher) {
String sql = "UPDATE teachers SET teacher_id = ?, name = ?, department = ?, contact = ?, password = ? 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());
@ -76,6 +101,12 @@ public class TeacherDAOImpl implements TeacherDAO {
}
}
/**
* 根据ID查询教师信息
*
* @param id 要查询的教师ID
* @return 如果找到则返回教师对象否则返回null
*/
@Override
public Teacher findById(int id) {
String sql = "SELECT * FROM teachers WHERE id = ?";
@ -94,6 +125,11 @@ public class TeacherDAOImpl implements TeacherDAO {
return null;
}
/**
* 查询所有教师记录
*
* @return 包含所有教师对象的列表如果没有记录则返回空列表
*/
@Override
public List<Teacher> findAll() {
List<Teacher> teachers = new ArrayList<>();
@ -111,6 +147,12 @@ public class TeacherDAOImpl implements TeacherDAO {
return teachers;
}
/**
* 根据工号查询教师信息
*
* @param teacherId 要查询的教师工号
* @return 如果找到则返回教师对象否则返回null
*/
@Override
public Teacher findByTeacherId(String teacherId) {
String sql = "SELECT * FROM teachers WHERE teacher_id = ?";
@ -131,6 +173,11 @@ public class TeacherDAOImpl implements TeacherDAO {
/**
* 将ResultSet映射为Teacher对象
* 从结果集中提取数据并创建Teacher实例
*
* @param rs 包含教师数据的ResultSet对象
* @return 映射后的Teacher对象
* @throws SQLException 如果访问ResultSet时发生错误
*/
private Teacher mapResultSetToTeacher(ResultSet rs) throws SQLException {
Teacher teacher = new Teacher();