首页 > 数据库 >MySQL第九章,数据访问和DAO模式

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

时间:2024-11-13 15:14:46浏览次数:3  
标签:PatientExamRecord java 第九章 数据库 DAO record MySQL Properties

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

标签:PatientExamRecord,java,第九章,数据库,DAO,record,MySQL,Properties
From: https://blog.csdn.net/it_s_raining/article/details/143743685

相关文章

  • MySQL导出1000条以上数据方法,及出错提示 --secure-file-priv解决方法
    1- MySQL导出1000条以上数据的脚本先上MySQL语句,如果执行没报错,那就是前人设置好了,如果报错接着向下看哦SELECT*FROMyour_tableINTOOUTFILE'C:/Users/Administrator/Desktop/key/file.csv'FIELDSTERMINATEDBY','ENCLOSEDBY'"'LINESTERMINATEDBY'\n&......
  • mysql基础知识
    sql语句类型及用途:Ddl:建表改表删表删数据【保留表结构】Dql:查询where,groupby,orderby,joinDml:新增修改删除数据Dcl:新增删除用户对数据库权限事务ACID特性简介原子性(Atomicity)事务被视为一个不可分割的最小单位,它要么完全执行,要么完全不执行。一致性(Consi......
  • 免费送源码:Java+python+django+MySQL 小区疫情订菜系统 计算机毕业设计原创定制
    摘 要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于小区疫情订菜系统当然也不能排除在外,随着网络技术的不断成熟,带动了小区疫情订菜系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种......
  • 数据库运维实操优质文章文档分享(含Oracle、MySQL等) | 2024年10月刊
    本文为大家整理了墨天轮数据社区2024年10月发布的优质技术文章/文档,主题涵盖Oracle、MySQL、PostgreSQL等主流数据库系统以及国产数据库的技术实操,从基础的安装配置到复杂的故障排查,再到性能优化的实用技巧及常用脚本等,分享给大家:Oracle优质技术文章概念梳理&安装配置OracleR......
  • MySQL 中的 DELETE、TRUNCATE 和 DROP:深入理解与应用
    MySQL中的DELETE、TRUNCATE和DROP:深入理解与应用在MySQL数据库管理中,DELETE、TRUNCATE和DROP是三个常用的命令,用于删除表中的数据或表本身。尽管它们的目的相似,但它们的执行原理和效果却大不相同。本文将深入探讨这三个命令的区别、执行原理以及适用场景。1.DELETE:逐......
  • 启动mysql报错“服务没有响应控制功能”
    启动mysql服务器报错,如图: 解决方案:1、查看path环境变量配置正确2、查看初始化配置文件正确[mysqld]#设置3306端口port=3306#设置mysql的安装目录basedir=D:\\mysql-8.0.40-winx64#设置mysql数据库的数据的存放目录datadir=D:\\mysql-8.0.40-winx64\\data#允......
  • MYSQL将一行数据的多列值放到另一列的多个行中
    在MySQL中,如果你想要将一行数据的多列值放到另一列的多个行中,你可以使用一个辅助表(例如,使用nums表)来生成序列,然后与你的原始表进行联接。比如下面一行一行数据,包含col1~col5总共5列,现在需要将这5类转换到一列中。转换前的数据:转换后的结果: 以下是一个示例:首先,创建一个辅......
  • MySQL 5.7.19 解压版安装配置详细教程
    MySQL5.7.19解压版安装配置详细教程1.软件下载首先,从MySQL官方网站下载MySQL5.7.19的解压版安装文件:下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip2.特别说明如果你之前安装过MySQL,并且出现了错误或者想要重新安装,可以使用以......
  • 基于Java+SpringBoot+Mysql在线课程学习教育系统功能设计与实现五
    一、前言介绍:免费获取:猿来入此1.1项目摘要随着信息技术的飞速发展和互联网的普及,教育领域正经历着深刻的变革。传统的面对面教学模式逐渐受到挑战,而在线课程学习教育系统作为一种新兴的教育形式,正逐渐受到广泛关注和应用。在线课程学习教育系统的出现,不仅为学生提供了更加灵......
  • 基于Java+SpringBoot+Mysql在线课程学习教育系统功能设计与实现六
    一、前言介绍:免费获取:猿来入此1.1项目摘要随着信息技术的飞速发展和互联网的普及,教育领域正经历着深刻的变革。传统的面对面教学模式逐渐受到挑战,而在线课程学习教育系统作为一种新兴的教育形式,正逐渐受到广泛关注和应用。在线课程学习教育系统的出现,不仅为学生提供了更加灵......