自学内容网 自学内容网

MySQL第九章,数据访问和DAO模式

一、数据访问与Properties配置文件

数据访问是应用程序与数据库之间的交互过程。在Java开发中,我们通常使用JDBC(Java Database Connectivity)来实现数据访问。然而,直接编写JDBC代码可能会导致代码冗长、难以维护,并且容易出错。为了简化数据访问过程,我们可以使用配置文件来管理数据库连接信息,并使用DAO模式来封装数据访问逻辑。

Properties配置文件是一种用于存储键值对信息的文件,它允许我们将数据库连接信息(如URL、用户名、密码等)保存在一个单独的文件中,从而方便管理和修改。在Java中,我们可以使用java.util.Properties类来读取和写入Properties配置文件。

二、DAO模式详解

DAO(Data Access Object)模式是一种用于分离业务逻辑和数据访问逻辑的设计模式。它将数据库操作封装在一个独立的DAO对象中,使得业务逻辑层可以通过调用DAO接口中的方法来访问数据库,而不需要关心具体的数据实现细节。

DAO模式通常包含以下几个部分:

  1. DAO接口:定义了数据访问操作的方法,如增删改查(CRUD)等。
  2. DAO实现类:实现了DAO接口中的方法,并包含了具体的数据访问逻辑。
  3. 实体类:用于存放从数据库检索出来的数据,通常与数据库中的表结构相对应。
  4. 数据库连接工具类:用于管理数据库的连接和关闭等操作。
三、使用Properties配置文件改造hospitalSystem工程

假设我们有一个名为hospitalSystem的工程项目,该项目需要与MySQL数据库进行交互。为了使用Properties配置文件来管理数据库连接信息,并封装数据访问逻辑,我们可以按照以下步骤进行改造:

简单来说,就是把数据库里面的数据配置到文件里面方便修改和取出

  1. 创建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
  1. 创建数据库连接工具类:编写一个工具类来读取Properties配置文件,并获取数据库连接。
  2. 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);
        }
    }

  3. 创建DAO接口和实现类:根据业务需求,创建相应的DAO接口和实现类。
  4. // 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 {
    
        @Override
        public 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();
            }
        }
    
        @Override
        public PatientExamRecord getExamRecordById(int id) {
            // 实现查询逻辑
        }
    
        @Override
        public List<PatientExamRecord> getAllExamRecords() {
            // 实现查询所有记录的逻辑
        }
    }

  5. 创建实体类:根据数据库表结构,创建相应的实体类。
  6. import java.time.LocalDate;
    
    public class PatientExamRecord {
        private int id;
        private int patientId;
        private LocalDate examDate;
        private String examResult;
    
        // Getters and Setters
    }
    四、查询病人的检查记录

    在DAO实现类中,我们可以编写相应的方法来查询病人的检查记录。例如,根据病人ID查询检查记录的方法:

  7. @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实现类。

  1. 创建properties配置文件:在你的项目中创建一个名为config.properties的文件,并在其中添加以下配置信息:

    • db.url:数据库URL
    • db.username:数据库用户名
    • db.password:数据库密码
  2. 编写DAO接口:为病人检查记录创建一个名为PatientExamRecordDao的DAO接口,并定义以下方法:

    • findPatientExamRecords(int patientId):根据病人ID查询检查记录
  3. 实现DAO接口:编写PatientExamRecordDao接口的实现类,并在其中实现findPatientExamRecords方法。该方法应使用JDBC或ORM框架来执行SQL查询,并返回查询结果。

  4. 创建实体类:根据数据库中的PatientExamRecord表结构,创建一个名为PatientExamRecord的Java实体类,并为每个字段提供对应的getter和setter方法。

  5. 编写业务逻辑代码:编写一个名为PatientService的类,并在其中编写一个名为getPatientExamRecords的方法。该方法应调用PatientExamRecordDao接口的findPatientExamRecords方法来获取病人的检查记录,并返回结果。

  6. 测试业务逻辑代码:编写一个测试类来测试PatientService类的getPatientExamRecords方法。确保该方法能够正确查询并返回病人的检查记录。


原文地址:https://blog.csdn.net/it_s_raining/article/details/143743685

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!