first commit
This commit is contained in:
43
src/dao/BaseDAO.java
Normal file
43
src/dao/BaseDAO.java
Normal 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
38
src/dao/DAOFactory.java
Normal 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;
|
||||
}
|
||||
}
|
||||
35
src/dao/LeaveRequestDAO.java
Normal file
35
src/dao/LeaveRequestDAO.java
Normal 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
30
src/dao/StudentDAO.java
Normal 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
30
src/dao/TeacherDAO.java
Normal 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);
|
||||
}
|
||||
227
src/dao/impl/LeaveRequestDAOImpl.java
Normal file
227
src/dao/impl/LeaveRequestDAOImpl.java
Normal 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;
|
||||
}
|
||||
}
|
||||
189
src/dao/impl/StudentDAOImpl.java
Normal file
189
src/dao/impl/StudentDAOImpl.java
Normal 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;
|
||||
}
|
||||
}
|
||||
180
src/dao/impl/TeacherDAOImpl.java
Normal file
180
src/dao/impl/TeacherDAOImpl.java
Normal 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user