什么是DAO层

1.DAO层?
介于业务逻辑层和数据库之间,进行数据的访问和操作。
 
2.DAO层包括三个部分。
DAO接口:定义了一系列操作数据库的方法。
DAO实现类:实现了操作数据库的方法。(对于不同数据库,有不同的实现)
DAO工厂类:返回一个DAO实现类对象。
 
3.DAO接口设计
package com.ibeifeng.dao;
 
import java.util.List;
 
import com.ibeifeng.vo.Customer;
 
/*
 * 客户管理DAO接口
 */
public interface CustomerDAO {
/**
 * 添加客户
 */
public void addCustomer(Customer customer);
/**
 * 按客户编号查询客户
 */
public Customer findByCustomerCode();
/**
 * 按客户名称查询客户
 */
public List<Customer> findByCustomerName();
/**
 * 按联系电话查询客户
 */
public List<Customer> findByPhone();
/**
 * 按联系地址查询客户
 */
public List<Customer> findByAddress();
/**
 * 按联系人查询客户
 */
public List<Customer> findByRelationMan();
/**
 * 按其他信息查询客户
 */
public List<Customer> findByOther();
}
 
 
 
4.DAO实现类
public void addCustomer(Customer customer) {
//1.获得连接对象
Connection conn = DataBaseManager.getConnection();
//2.SQL语句
String addSql = "insert into customer(customercode,customername,phone,address,relationman,other)" +
" values(?,?,?,?,?,?);";
//3.通过连接对象来创建一个预处理语句对象
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(addSql);
//4.设置参数
pstmt.setString(1, customer.getCustomercode());
pstmt.setString(2, customer.getCustomername());
pstmt.setString(3, customer.getPhone());
pstmt.setString(4, customer.getAddress());
pstmt.setString(5, customer.getRelationman());
pstmt.setString(6, customer.getOther());
//执行插入
pstmt.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally{
DataBaseManager.close(pstmt);
DataBaseManager.close(conn);
}
}
 
5.DAO工厂类
/*
 * 客户管理DAO工厂类
 */
public class CustomerDAOFactory {
public static CustomerDAO getCustomerDAO() {
return new CustomerDAOImpl();
}
}
 
 
6.测试添加客户
package com.ibeifeng.test;
 
import com.ibeifeng.dao.CustomerDAO;
import com.ibeifeng.daofactory.CustomerDAOFactory;
import com.ibeifeng.vo.Customer;
 
public class AddCustomerTest {
public static void main(String[] args) {
CustomerDAO cdao = CustomerDAOFactory.getCustomerDAO();
//封装客户对象
Customer customer = new Customer();
customer.setCustomercode("234");
customer.setCustomername("北风网");
customer.setPhone("123456");
customer.setAddress("中国上海");
customer.setRelationman("厉风行");
customer.setOther("很好");
cdao.addCustomer(customer);
}
}
 
 
### DAO的定义和功能 #### 定义 DAO(Data Access Object)即数据访问对象,它是软件架构中专门负责处理数据存储相关操作的一。通过将数据访问逻辑封装到单独的模块中,使得应用的其他部分无需关心底的数据存储细节[^1]。 #### 功能 DAO的主要功能可以概括如下: 1. **抽象化数据访问** DAO屏蔽了不同数据库之间的差异,使上业务逻辑能够以统一的方式与数据交互。无论底使用的是关系型数据库还是NoSQL数据库,DAO都提供了标准化的操作接口[^2]。 2. **集中管理数据操作** 所有的增删改查(CRUD)操作都被集中在DAO实现。这种集中化的管理模式有助于减少重复代码并提高可维护性[^3]。 3. **降低耦合度** 在分架构中,DAO作为数据访问的核心组件,与其他保持松散耦合的关系。例如,在业务逻辑(Service),只需调用DAO提供的接口即可完成数据读取或更新,而不需要直接依赖于特定的数据库连接或查询语句[^3]。 4. **支持事务管理和异常处理** DAO通常还承担着事务控制的任务,确保多个数据库操作要么全部成功提交,要么完全回滚。此外,它也负责捕获和处理来自数据库的错误信息,并将其转换为更易于理解的形式传递给上[^1]。 5. **促进单元测试** 由于DAO独立于业务逻辑和其他高组件,因此更容易对其进行隔离测试。开发者可以通过模拟数据库环境来验证DAO方法的行为是否符合预期。 ```java // 示例:一个简单的DAO类 public class UserDao { private Connection connection; public UserDao(Connection connection) { this.connection = connection; } public User getUserById(int id) throws SQLException { // 查询用户 String query = "SELECT * FROM users WHERE id=?"; try (PreparedStatement stmt = connection.prepareStatement(query)) { stmt.setInt(1, id); ResultSet rs = stmt.executeQuery(); if (rs.next()) { return new User(rs.getInt("id"), rs.getString("name")); } } return null; // 如果未找到记录则返回null } public void saveUser(User user) throws SQLException { // 插入新用户 String insertQuery = "INSERT INTO users(name) VALUES (?)"; try (PreparedStatement stmt = connection.prepareStatement(insertQuery)) { stmt.setString(1, user.getName()); stmt.executeUpdate(); } } } ``` 以上代码展示了如何创建一个基本的`UserDao`类,该类实现了获取单个用户以及保存用户的两个核心功能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值