您的位置:首页 > 健康 > 养生 > 【小学期】操纵数据的DAO设计——以学生管理系统为例

【小学期】操纵数据的DAO设计——以学生管理系统为例

2024/12/24 1:18:29 来源:https://blog.csdn.net/qq_36631076/article/details/139999849  浏览:    关键词:【小学期】操纵数据的DAO设计——以学生管理系统为例

项目结构

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设计原因及功能

  1. 分离关注点:DAO模式将数据访问逻辑与业务逻辑分离,使代码更清晰,更易于维护和扩展。
  2. 复用性:数据访问逻辑集中在DAO类中,可以在多个地方重用,而不必在每个需要访问数据库的地方重复编写代码。
  3. 可测试性:通过将数据访问逻辑集中在DAO类中,可以更容易地对数据访问部分进行单元测试。
  4. 更好的维护性:如果数据库结构发生变化,只需修改DAO类中的代码,而不需要修改业务逻辑代码。

通过以上设计,我们实现了一个简单但功能齐全的学生管理系统的DAO层,为系统的进一步开发奠定了基础。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com