文档:增加详细注释
This commit is contained in:
parent
a7825643a7
commit
0aad1d1271
@ -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);
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user