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模式通常包含以下几个部分:
- 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 { @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() { // 实现查询所有记录的逻辑 } }
- 创建实体类:根据数据库表结构,创建相应的实体类。
-
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
的文件,并在其中添加以下配置信息:db.url
:数据库URLdb.username
:数据库用户名db.password
:数据库密码
-
编写DAO接口:为病人检查记录创建一个名为
PatientExamRecordDao
的DAO接口,并定义以下方法:findPatientExamRecords(int patientId)
:根据病人ID查询检查记录
-
实现DAO接口:编写
PatientExamRecordDao
接口的实现类,并在其中实现findPatientExamRecords
方法。该方法应使用JDBC或ORM框架来执行SQL查询,并返回查询结果。 -
创建实体类:根据数据库中的
PatientExamRecord
表结构,创建一个名为PatientExamRecord
的Java实体类,并为每个字段提供对应的getter和setter方法。 -
编写业务逻辑代码:编写一个名为
PatientService
的类,并在其中编写一个名为getPatientExamRecords
的方法。该方法应调用PatientExamRecordDao
接口的findPatientExamRecords
方法来获取病人的检查记录,并返回结果。 -
测试业务逻辑代码:编写一个测试类来测试
PatientService
类的getPatientExamRecords
方法。确保该方法能够正确查询并返回病人的检查记录。
原文地址:https://blog.csdn.net/it_s_raining/article/details/143743685
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!