6.4 KiB
6.4 KiB
本次任务是完成DAO接口实现类开发,并进行单元测试。
准备工作
安装Git工具
同步项目代码
在桌面上右键,选择 Open Git Bash here
执行命令:
git clone https://git.seahi.me/用户名/stu学号.git
任务一:完成DAO接口的实现类
Day 3 任务中已经完成了StudentdAOImpl
类的实现,接下来继续完成 TeacherDaoImpl
和LeaveRequestDAOImpl
类,这两个类分别实现TeacherDAO
接口和LeaveRequestDAO
接口。
StudentDAOImpl
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
下载后放置到合适的位置
任务二:DAO实现类的单元测试
将下列文件放置在 src/test/dao/impl
目录中,检查测试是否通过
提交代码
在项目目录中,打开 Git Bash,执行:
git config --global user.email "换成你的邮箱"
git config --global user.name "换成你的用户名"
git add .
git commit -m "完成Day4任务"
git push