6.4 KiB
Raw Blame History

本次任务是完成DAO接口实现类开发并进行单元测试。

准备工作

安装Git工具

下载

同步项目代码

在桌面上右键,选择 Open Git Bash here

执行命令:

git clone https://git.seahi.me/用户名/stu学号.git

任务一完成DAO接口的实现类

Day 3 任务中已经完成了StudentdAOImpl类的实现,接下来继续完成 TeacherDaoImplLeaveRequestDAOImpl类,这两个类分别实现TeacherDAO接口和LeaveRequestDAO接口。

StudentDAOImpl

StudentDAOImpl.java

TeacherDAOImpl

package dao.impl;

import dao.TeacherDAO;
import model.Teacher;
import util.DatabaseUtil;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 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());
            stmt.setString(4, teacher.getContact());
            stmt.setString(5, teacher.getPassword());
            
            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;
        }
    }

    /**
     * 根据ID删除教师记录
     * 
     * @param id 要删除的教师记录的ID
     * @return 影响的行数删除成功返回1失败返回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;
        }
    }
    
    /**
     * 根据ID查询教师信息
     * 
     * @param id 要查询的教师ID
     * @return 如果找到则返回教师对象否则返回null
     */
    @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;
    }

    /**
     * 查询所有教师记录
     * 
     * @return 包含所有教师对象的列表,如果没有记录则返回空列表
     */
    @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;
    }

    /**
     * 根据工号查询教师信息
     * 
     * @param teacherId 要查询的教师工号
     * @return 如果找到则返回教师对象否则返回null
     */
    @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;
    }

    /**
     * 将ResultSet映射为Teacher对象
     * 从结果集中提取数据并创建Teacher实例
     * 
     * @param rs 包含教师数据的ResultSet对象
     * @return 映射后的Teacher对象
     * @throws SQLException 如果访问ResultSet时发生错误
     */
    private Teacher mapResultSetToTeacher(ResultSet rs) throws SQLException {
        // TODO 补全代码参考Day3 任务二.4
    }
}

LeaveRequestDAOImpl

源文件:LeaveRequestDAOImpl.java

下载后放置到合适的位置

任务二DAO实现类的单元测试

将下列文件放置在 src/test/dao/impl 目录中,检查测试是否通过

TeacherDAOImplTest.java

LeaveRequestDAOImplTest.java

提交代码

在项目目录中,打开 Git Bash执行

git config --global user.email "换成你的邮箱"
git config --global user.name "换成你的用户名"

git add .
git commit -m "完成Day4任务"
git push