DAO模式

时间:2024-11-22 07:07:31

前言

DAO(Data Access Object)模式 是一种常用的设计模式,主要用于将数据访问逻辑与业务逻辑分离。它提供了一种抽象层,使得应用程序可以与不同的数据源(如数据库、文件系统等)进行交互,而无需了解底层数据存储的细节。DAO 模式的核心思想是将数据访问操作封装在独立的类中,从而提高代码的可维护性、可扩展性和可重用性。

如何使用DAO模式

1.首先导入这个包(有需要的可以私聊我)然后添加配置文件,为项目添加依赖(具体看要求)

2.创建目录

如果没有问题目录应该是这个样子

>src

 >DAO(软件包)

        >>entity

        >>impl

>Lib

 然后我们在DAO包下创建BaseDao类

我们在这个类里写入数据库驱动

package DAO;

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 BaseDao {
    public static String a;
    public static String b;
    public static String c;
    public static String d;
    public static Connection conn;

    static {
        try {
            P();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }


    public static void P() throws IOException {
        Properties p =new Properties();
        InputStream in = BaseDao.class.getClassLoader().getResourceAsStream("jiangchao.properties");
        p.load(in);
         a=p.getProperty("a");
         b=p.getProperty("b");
         c=p.getProperty("c");
         d=p.getProperty("d");

    }

    public static void C() throws SQLException, ClassNotFoundException {
        Class.forName(a);
        conn =DriverManager.getConnection(b,c,d);
    }
}

附上配置文件参考

a=com.mysql.cj.jdbc.Driver
b=jdbc:mysql://localhost:3306/b?serverTimezone=GMT-8
c=root
d=123456

至此我们完成了第一步,接下来我们创建一个接口(名字看个人)

在接口里写入要用的方法

package DAO;

import DAO.entity.Patient;

import java.sql.SQLException;
import java.util.List;

public interface CeDao {
    void sc() throws SQLException, ClassNotFoundException;
}

然后我们对着方法名ait+回车

实现方法(这里需要提前在impl里创好类,方便选择)

@Override
    public void sc() throws SQLException, ClassNotFoundException {
        C();
        String sql="DELETE  FROM `checkitem_检查项目表` WHERE checkItemName='心电图';";
        PreparedStatement pr = conn.prepareStatement(sql);
        int i = pr.executeUpdate();
        if (i>0){
            System.out.println("成功");
        }else {
            System.out.println("失败");
        }
    }

这里需要记得继承类

public class CeDaoImpl extends BaseDao implements CeDao

调用

public class Text {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        CeDao c = new CeDaoImpl();
        c.sc();
    }

}

到这一个简单的DAO模式就完成了

深入一点

先在entity里创类

package DAO.entity;

public class Patient {

    private Integer patientID;
    private String patientName;

    public void setPatientID(Integer patientID) {
        this.patientID = patientID;
    }

    public Integer getPatientID() {
        return patientID;
    }

    public void setPatientName(String patientName) {
        this.patientName = patientName;
    }

    public String getPatientName() {
        return patientName;
    }


}

然后正常接口写方法(我们直接跳过到方法)

@Override
    public Patient login(String Name, String pwd) throws SQLException, ClassNotFoundException {
        C();
        Patient p=new Patient();

        String sql="SELECT * FROM patient_病人 where patientName = ? and password=?";
        PreparedStatement pr = conn.prepareStatement(sql);
        pr.setString(1,Name);
        pr.setString(2,pwd);

        ResultSet resultSet = pr.executeQuery();
        if (resultSet.next()){
            p.setPatientID(Integer.valueOf(resultSet.getString("patientID")));
            p.setPatientName(resultSet.getString("patientName"));
        }
        return p;
    }

然后调用

Patient p=c.login("张三","123456");
       if (p.getPatientID()>0){
          System.out.println("欢迎"+p.getPatientName());
       }else {
           System.out.println("失败");
       }
    }

完成了

附上接口代码

Patient login(String Name, String pwd) throws SQLException, ClassNotFoundException;

概念知识

接口一般叫DAO接口,entity里的叫实体类,impl里的是实现类,其实还有一个工厂类(不过我觉得有点可有可无,少打一两句代码而已)

DAO有许多实现方式,我上面的例子是基于JDBC的实现方式,还有基于MyBatis的DAO实现,基于Spring JDBC的DAO实现等

DAO有解耦,提高代码维护性,扩展性,重用性,支持面向接口编程,便于单元测试等优点,但它也有增加了代码的复杂性,性能问题,难以处理复杂查询,需要额外配置,可能掩盖底层数据库细节等缺点

总体而言,DAO模式是一种强大的设计模式,适用于中大型项目,能够有效地管理数据访问操作,提高代码质量和开发效率。然而,在使用DAO模式时,需要根据具体项目需求和团队技术栈进行权衡和优化。