项目结构
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层,为系统的进一步开发奠定了基础。