前言
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模式时,需要根据具体项目需求和团队技术栈进行权衡和优化。