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

embedded/2024/11/14 19:51:03/
一、数据访问与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 {@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() {// 实现查询所有记录的逻辑}
    }

  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的文件,并在其中添加以下配置信息:

  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方法。确保该方法能够正确查询并返回病人的检查记录。


http://www.ppmy.cn/embedded/137580.html

相关文章

Springboot整合xxl-job

拉取xxl-job xxl-job: 一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 配置项目 执行sql语句 更改配置 启动 访问 任务调度中心http://127.0.0.1:8081/xxl-job-…

【图像压缩感知】论文阅读:Self-supervised Scalable Deep Compressed Sensing

tips&#xff1a;本文为个人阅读论文的笔记&#xff0c;仅作为学习记录所用。 Title&#xff1a;Self-supervised Scalable Deep Compressed Sensing Journal&#xff1a;IJCV 2024 代码链接&#xff1a;GitHub - Guaishou74851/SCNet: Self-Supervised Scalable Deep Comp…

反向代理模块

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…

vite-plugin-svg-icons 库作用

一、 图标管理与整合 1. 自动扫描与注册 该插件能够自动扫描指定目录下的 .svg 文件&#xff0c;并将这些文件注册为 Vue 组件。 这意味着开发者无需手动逐个导入 .svg 文件&#xff0c;大大简化了在 Vue 项目中使用 SVG 图标的过程。 例如&#xff1a;如果项目中有一个 ic…

teamviewer源代码 远程控制软件源代码 定制贴牌 自有知识产权

kkview 远程控制 远程桌面源代码 定制 贴牌&#xff0c;官网有联系方法 kkview.com 。 欢迎洽谈合作 已上架华为、小米应用市场&#xff0c;支持LINUX,WINDOWS.ANDROID,WEB.鸿蒙。 teamviewer源代码 远程控制源代码 定制贴牌 自有知识产权 主要功能&#xff1a; 远程桌面 一…

【Linux】多线程(概念,控制)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12625432.html 目录 再谈地址空间 线程概念 创建线程初识 线程的优点 线程的缺点 线程异常 L…

【统计的思想】测试设计中常用的统计知识(一)

我们知道&#xff0c;测试活动中充满了不确定性。我们测试人员都很喜欢缺陷&#xff0c;找到缺陷能给我们带来很多成就感。但是我们也经常碰到一些让我们深恶痛绝的缺陷。 这就是那些不能稳定复现的缺陷——我测的时候发现问题了&#xff0c;提了bug&#xff0c;开发修的时候来…

C语言串讲-1之基础语法

C语言源代码转变成可执行程序的过程&#xff1a; 1.程序为什么要被编译器编译之后才能运行? 因为计算机能够识别的只有机器语言&#xff0c;机器语言就是由二进制0和1构成。所以为了让计算机执行我们写的程序&#xff0c;必须翻译成计算机能够识别的机器语言程序(目标程序)。…