前言
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里创好类,方便选择)
@Overridepublic 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;}}
然后正常接口写方法(我们直接跳过到方法)
@Overridepublic 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模式时,需要根据具体项目需求和团队技术栈进行权衡和优化。