项目结构
student_management
│
├── src
│ ├── model
│ │ ├── Student.java
│ │ └── StudentDAO.java
│ │
│ ├── view
│ │ └── StudentView.java
│ │
│ ├── controller
│ │ └── StudentController.java
│ │
│ └── util
│ ├── DBUtil.java
│ ├── EncodingUtil.java
│ └── OtherUtil.java
│
└── resources└── database.properties
1. 创建Student类
这个类表示学生对象,包含学生的基本属性和对应的getter和setter方法。
package model;/*** 学生类,表示学生对象*/
public class Student {private int id;private String name;private int age;private String grade;public Student() {}public Student(int id, String name, int age, String grade) {this.id = id;this.name = name;this.age = age;this.grade = grade;}// Getter和Setter方法public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGrade() {return grade;}public void setGrade(String grade) {this.grade = grade;}
}
2. 创建StudentDAO类
StudentDAO
类用于执行对数据库的操作。我们将创建一个使用MySQL的DAO类来执行基本的CRUD操作。
package model;import util.DBUtil;import java.sql.*;
import java.util.ArrayList;
import java.util.List;/*** 学生数据访问对象类,用于执行对学生表的CRUD操作*/
public class StudentDAO {/*** 添加学生信息* @param student 学生对象* @return 添加成功返回true,否则返回false*/public boolean addStudent(Student student) {String sql = "INSERT INTO students (name, age, grade) VALUES (?, ?, ?)";try (Connection conn = DBUtil.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, student.getName());pstmt.setInt(2, student.getAge());pstmt.setString(3, student.getGrade());int affectedRows = pstmt.executeUpdate();return affectedRows > 0;} catch (SQLException e) {e.printStackTrace();}return false;}/*** 更新学生信息* @param student 学生对象* @return 更新成功返回true,否则返回false*/public boolean updateStudent(Student student) {String sql = "UPDATE students SET name = ?, age = ?, grade = ? WHERE id = ?";try (Connection conn = DBUtil.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, student.getName());pstmt.setInt(2, student.getAge());pstmt.setString(3, student.getGrade());pstmt.setInt(4, student.getId());int affectedRows = pstmt.executeUpdate();return affectedRows > 0;} catch (SQLException e) {e.printStackTrace();}return false;}/*** 删除学生信息* @param id 学生ID* @return 删除成功返回true,否则返回false*/public boolean deleteStudent(int id) {String sql = "DELETE FROM students WHERE id = ?";try (Connection conn = DBUtil.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setInt(1, id);int affectedRows = pstmt.executeUpdate();return affectedRows > 0;} catch (SQLException e) {e.printStackTrace();}return false;}/*** 获取所有学生信息* @return 学生对象列表*/public List<Student> getAllStudents() {List<Student> students = new ArrayList<>();String sql = "SELECT * FROM students";try (Connection conn = DBUtil.getConnection();Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql)) {while (rs.next()) {Student student = new Student();student.setId(rs.getInt("id"));student.setName(rs.getString("name"));student.setAge(rs.getInt("age"));student.setGrade(rs.getString("grade"));students.add(student);}} catch (SQLException e) {e.printStackTrace();}return students;}/*** 根据学生ID获取学生信息* @param id 学生ID* @return 学生对象,如果没有找到则返回null*/public Student getStudentById(int id) {String sql = "SELECT * FROM students WHERE id = ?";try (Connection conn = DBUtil.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setInt(1, id);try (ResultSet rs = pstmt.executeQuery()) {if (rs.next()) {Student student = new Student();student.setId(rs.getInt("id"));student.setName(rs.getString("name"));student.setAge(rs.getInt("age"));student.setGrade(rs.getString("grade"));return student;}}} catch (SQLException e) {e.printStackTrace();}return null;}
}
3. 创建DBUtil类
为了管理数据库连接,我们需要一个DBUtil
类。这里假设我们使用的数据库是MySQL。
package util;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;/*** 数据库工具类,用于管理数据库连接*/
public class DBUtil {private static final String URL = "jdbc:mysql://localhost:3306/studentdb";private static final String USER = "root";private static final String PASSWORD = "password";static {try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}/*** 获取数据库连接* @return 数据库连接对象* @throws SQLException SQL异常*/public static Connection getConnection() throws SQLException {return DriverManager.getConnection(URL, USER, PASSWORD);}
}
代码详解与设计原因
Student类
- 作用:表示学生对象,包含学生的基本属性(ID、姓名、年龄和年级)以及对应的getter和setter方法。
StudentDAO类
- 作用:用于执行对学生表的CRUD操作。通过使用
Connection
,PreparedStatement
,ResultSet
等类,来实现对数据库的增删查改。 - 方法:
addStudent
:添加学生信息到数据库。updateStudent
:更新学生信息。deleteStudent
:根据ID删除学生信息。getAllStudents
:获取所有学生信息。getStudentById
:根据ID获取学生信息。
DBUtil类
- 作用:管理数据库连接,提供
getConnection
方法来获取数据库连接对象。
DAO设计原因及功能
- 分离关注点:DAO模式将数据访问逻辑与业务逻辑分离,使代码更清晰,更易于维护和扩展。
- 复用性:数据访问逻辑集中在DAO类中,可以在多个地方重用,而不必在每个需要访问数据库的地方重复编写代码。
- 可测试性:通过将数据访问逻辑集中在DAO类中,可以更容易地对数据访问部分进行单元测试。
- 更好的维护性:如果数据库结构发生变化,只需修改DAO类中的代码,而不需要修改业务逻辑代码。
通过以上设计,我们实现了一个简单但功能齐全的学生管理系统的DAO层,为系统的进一步开发奠定了基础。