浅谈DAO设计模式

本文详细介绍了数据库操作及DAO设计模式的核心概念与实践应用,包括实体类、数据库连接类、DAO接口及其实现类、代理实现类和工厂类的设计与实现。重点阐述了如何通过封装数据库操作和接口分离来提高代码复用性和降低耦合度,以及如何通过多态特性实现跨数据库操作的统一接口。同时,文章强调了分包管理的重要性,以保持代码结构清晰、易于维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  DAO设计模式简要分析

1,首先定义被操作对象数据的实体类,有的书上称VO类  有的老师叫entity 类 

注意以下几点:类名和表名一致,私有化属性,添加SET() GET()方法,

保存在 ”项目名.VO “包中, 因为要写多个不同作用的类。为了更加清晰,方便使用, 分包保存是必然的,

 

2,定义一个DatabaseConnection 类 ,主要完成数据库的打开及关闭操作

 

因为要对数据进行操作的时候都要进行数据库的链接和关闭操作,而且在一个项目组必然会有大量的操作方法,增删改之类的,所以为了减少代码量,可以把这部分代码提取出来,封装成一个类,用到的时候,直接可以调用.

 

具体属性:

因为要这个类要返回一个 connection 所以 要有一个 connection变量

一个 getconnecton()返回值是connection 的方法 

在里面实现数据库的链接操作,此时可以用的属性文件配置变量

一个返回值是空的closeconnection()方法;

 

关于数据库链接关闭的databaseconnection类还有以下处理方法。

因为在具体的操作过程有可能会遇到不同的数据库链接操作,

此方法中需要写   一个接口,一个接口的实现类,一个工厂类。

 

接口中定义上面说到的获得和关闭两个方法  实现类中根据不同的数据库实现这个接口,然后用一个工厂类进行具体的使用,

 

在工厂类中返定义一个getConnection()方法  返回类型是接口,具体的返回值是接口的实现类,

这三个类完成后 更好的减少了类之间的耦合性

 

写在一个新的包中“项目名。dbc

 

 

 

package com.tarena.util;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.util.Properties;

 

 

 

 

public class DatabaseConnection {

 

private static String DATABASE_DRIVER;

private static String DATABASE_URL;

private static String DATABASE_USER;

private static String DATABASE_PWD;

private Connection conn null;

 

public DatabaseConnection(){

 Properties prop new Properties();

 try {

prop.load(DatabaseConnection.class.getClassLoader().getResourceAsStream("DBConfig.properties"));

DATABASE_DRIVER prop.getProperty("DATABASE_DRIVER");

DATABASE_URL prop.getProperty("DATABASE_URL");

DATABASE_USER prop.getProperty("DATABASE_USER");

DATABASE_PWD prop.getProperty("DATABASE_PWD");

 catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

public Connection getConnection(){

try {

Class.forName(DATABASE_DRIVER);

conn DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PWD);

catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return conn;

}

 

public void closeConnection(){

if(this.conn != null){

try{

this.conn.close();

}catch(Exception e){

e.printStackTrace();

}

}

}

 

 

}

 

 

 

3,定义DAO 接口  根据不同的操作对象写不同的dao 接口

根据不同的需求写不同的方法,一般就是增删改查

 

package com.tarena.dao;

 

import com.tarena.entity.User;

 

public interface IUserDao {

 

public boolean addUser();

 

public User findByUsername();

 

 

}

 

 

写在“项目名。dao”包里面

 

4,写DAO 接口的真实主题实现类

 

实现到接口中的方法

package com.tarena.dao.impl;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

 

import com.tarena.dao.IUserDao;

import com.tarena.entity.User;

 

public class UserDaoImpl implements IUserDao{

 

private Connection conn null;

private PreparedStatement pstmt null;

 

public UserDaoImpl(Connection conn){

this.conn conn;

}

 

public boolean addUser() {

 

return false;

}

 

public User findByUsername() {

 

return null;

}

 

}

 

有自定义了两个属性 一个connection 在本类的构造方法里进行取得数据库链接

一个数据库操作对象属性

 

放在“项目名。DAO.IMPL”中表示dao接口的真实主题实现类

 

5,写代理主题的实现类。

这个类也要实现到接口中的方法

名字为  xxxdaoproxy

 

为什么要写这个类,个人理解,首先可以降低代码之间的耦合度

我们在上面第二步中定义了数据库的链接类

第三步第四步中定义了对数据的操作类,

在这个类中就是 把两者结合起来,

所以这个类中有两个私有变量,

一个是第二步中写的链接类变量,一个是地四步写的实现dao接口的操作类,

在构造方法里 链接数据库,就是实例化上面的两个变量,

我们在地四步中写dao实现类的时候定义了一个构造方法,参数是connection

此时就可以用 实例化的数据库连接类的getconnection()方法作为参数了

 

 

让后 在这个类要重写的dao接口方法里,可以进行一些判断,具体的实现可以直接调用真是主题实现类了。。

 

6dao的工厂类 

定义一个返回类型是  dao接口的方法就行具体返回值是 代理主题实现类

 

 

 

 

 

 

总结:不管是第二步为了应对不同的数据库链接,提到的把一个类写成三个类

一个接口 一个实现类 一个工厂类,

还是数据操作中写的一个接口 一个真实实现类 一个代理实现类一个工厂,都是为了减少代码的耦合度

 

相同点;具体的工厂类是使用的时候用到的,而返回的都接口类型,返回值却是具体的实现类。这就是java中的多态,用的是接口,用的是固定的方法名,至于不同的数据库实现或方法实现交给实现类去做,根据不同的返回值使用不同的方法 ,但是名字却都是一样的,就是接口的名字

不同点:至于数据操作中 的 代理实现类就是为了数据库链接和操作整合起来而已

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值