一、数据访问与Properties配置文件
数据访问是应用程序与数据库之间的交互过程。在Java开发中,我们通常使用JDBC(Java Database Connectivity)来实现数据访问。然而,直接编写JDBC代码可能会导致代码冗长、难以维护,并且容易出错。为了简化数据访问过程,我们可以使用配置文件来管理数据库连接信息,并使用DAO模式来封装数据访问逻辑。
Properties配置文件是一种用于存储键值对信息的文件,它允许我们将数据库连接信息(如URL、用户名、密码等)保存在一个单独的文件中,从而方便管理和修改。在Java中,我们可以使用java.util.Properties
类来读取和写入Properties配置文件。
二、DAO模式详解
DAO(Data Access Object)模式是一种用于分离业务逻辑和数据访问逻辑的设计模式。它将数据库操作封装在一个独立的DAO对象中,使得业务逻辑层可以通过调用DAO接口中的方法来访问数据库,而不需要关心具体的数据实现细节。
DAO模式通常包含以下几个部分:
- DAO接口:定义了数据访问操作的方法,如增删改查(CRUD)等。
- DAO实现类:实现了DAO接口中的方法,并包含了具体的数据访问逻辑。
- 实体类:用于存放从数据库检索出来的数据,通常与数据库中的表结构相对应。
- 数据库连接工具类:用于管理数据库的连接和关闭等操作。
三、使用Properties配置文件改造hospitalSystem工程
假设我们有一个名为hospitalSystem的工程项目,该项目需要与MySQL数据库进行交互。为了使用Properties配置文件来管理数据库连接信息,并封装数据访问逻辑,我们可以按照以下步骤进行改造:
简单来说,就是把数据库里面的数据配置到文件里面方便修改和取出
- 创建Properties配置文件:在项目的资源目录(如
src/main/resources
)下创建一个名为database.properties
的文件,并在其中添加数据库连接信息。
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/hospitalSystem?serverTimezone=GMT-8
username=root
password=yourpassword
- 创建数据库连接工具类:编写一个工具类来读取Properties配置文件,并获取数据库连接。
-
import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties;public class DatabaseUtil {private static String driver;private static String url;private static String user;private static String password;static {try (InputStream input = DatabaseUtil.class.getClassLoader().getResourceAsStream("database.properties")) {Properties prop = new Properties();if (input == null) {System.out.println("Sorry, unable to find database.properties");return;}prop.load(input);driver = prop.getProperty("driver");url = prop.getProperty("url");user = prop.getProperty("username");password = prop.getProperty("password");Class.forName(driver);} catch (IOException | ClassNotFoundException ex) {ex.printStackTrace();}}public static Connection getConnection() throws SQLException {return DriverManager.getConnection(url, user, password);} }
- 创建DAO接口和实现类:根据业务需求,创建相应的DAO接口和实现类。
-
// PatientExamRecordDAO.java public interface PatientExamRecordDAO {// 定义数据访问方法void addExamRecord(PatientExamRecord record);PatientExamRecord getExamRecordById(int id);List<PatientExamRecord> getAllExamRecords(); }// PatientExamRecordDAOImpl.java import java.sql.*; import java.util.ArrayList; import java.util.List;public class PatientExamRecordDAOImpl implements PatientExamRecordDAO {@Overridepublic void addExamRecord(PatientExamRecord record) {String sql = "INSERT INTO patient_exam_records (patient_id, exam_date, exam_result) VALUES (?, ?, ?)";try (Connection conn = DatabaseUtil.getConnection();PreparedStatement ps = conn.prepareStatement(sql)) {ps.setInt(1, record.getPatientId());ps.setDate(2, Date.valueOf(record.getExamDate()));ps.setString(3, record.getExamResult());ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}}@Overridepublic PatientExamRecord getExamRecordById(int id) {// 实现查询逻辑}@Overridepublic List<PatientExamRecord> getAllExamRecords() {// 实现查询所有记录的逻辑} }
- 创建实体类:根据数据库表结构,创建相应的实体类。
-
import java.time.LocalDate;public class PatientExamRecord {private int id;private int patientId;private LocalDate examDate;private String examResult;// Getters and Setters }
四、查询病人的检查记录
在DAO实现类中,我们可以编写相应的方法来查询病人的检查记录。例如,根据病人ID查询检查记录的方法:
-
@Override public PatientExamRecord getExamRecordByIdAndPatientId(int id, int patientId) {String sql = "SELECT * FROM patient_exam_records WHERE id = ? AND patient_id = ?";try (Connection conn = DatabaseUtil.getConnection();PreparedStatement ps = conn.prepareStatement(sql)) {ps.setInt(1, id);ps.setInt(2, patientId);ResultSet rs = ps.executeQuery();if (rs.next()) {PatientExamRecord record = new PatientExamRecord();record.setId(rs.getInt("id"));record.setPatientId(rs.getInt("patient_id"));record.setExamDate(rs.getDate("exam_date").toLocalDate());record.setExamResult(rs.getString("exam_result"));return record;}} catch (SQLException e) {e.printStackTrace();}return null; }
注意,上述代码是一个示例,具体实现可能需要根据实际的数据库表结构和业务需求进行调整。此外,为了简化代码和提高可维护性,建议使用ORM框架(如MyBatis或Hibernate)来替代手动编写JDBC代码和DAO实现类。
-
创建properties配置文件:在你的项目中创建一个名为
config.properties
的文件,并在其中添加以下配置信息: -
编写DAO接口:为病人检查记录创建一个名为
PatientExamRecordDao
的DAO接口,并定义以下方法:findPatientExamRecords(int patientId)
:根据病人ID查询检查记录
-
实现DAO接口:编写
PatientExamRecordDao
接口的实现类,并在其中实现findPatientExamRecords
方法。该方法应使用JDBC或ORM框架来执行SQL查询,并返回查询结果。 -
创建实体类:根据数据库中的
PatientExamRecord
表结构,创建一个名为PatientExamRecord
的Java实体类,并为每个字段提供对应的getter和setter方法。 -
编写业务逻辑代码:编写一个名为
PatientService
的类,并在其中编写一个名为getPatientExamRecords
的方法。该方法应调用PatientExamRecordDao
接口的findPatientExamRecords
方法来获取病人的检查记录,并返回结果。 -
测试业务逻辑代码:编写一个测试类来测试
PatientService
类的getPatientExamRecords
方法。确保该方法能够正确查询并返回病人的检查记录。