Spring框架(JavaEE开发进阶Ⅲ)—数据访问

Spring的数据访问

一、主要内容

1、Spring数据访问的异常体系
2、数据访问模版化
3、使用DAO支持类

二、前言


1、Spring对数据访问的支持同样遵循OO原则:针对接口编程
2、DAO(数据访问对象)提供对数据库进行数据访问的一种方式
3、服务对象(Service object)/业务对象(Business object)本身不会处理数据访问,而是将数据访问委托给DAO。DAO接口确保其和服务对象的松耦合
4、服务对象不与特定的数据访问实现绑定
5、数据访问层以与持久化技术无关的方式进行数据访问。持久化技术的选择独立于DAO(接口),只有相关的数据访问方式通过接口进行发布,可灵活切换持久化框架(实现策略模式)
6、数据访问对象DAO模式:是GoF Strategy策略模式的一种特殊形式。用途是将“与持久化相关的代码”从业务逻辑中分离出来
7、DAO模式需要一个DAO接口,以便将特定的数据访问实现细节掩藏起来
8、业务对象BO只应该关注业务逻辑,不应该关心数据存取细节;数据访问对象必须实现特定的持久化策略,并通过一个通用的DAO接口暴露给业务对象使用
9、数据访问对象需要参与到事务中,但通常不应该由它们来驱动事务,因为DAO中的操作一般都是细粒度的。应该由调用DAO的业务对象来负责划分事务——通常是在业务facade门面的层面上。一个业务对象可能调用多个DAO方法,甚至可能在一次事务中涉及多个DAO
10、示例:一个基于web的应用程序按照逻辑分为三层:web层、业务逻辑层、数据访问层。有一个OrderManager业务对象,需要存储一个订单(order),并对库存(inventory)数据库进行更新。
interface OrderDao {
    void saveOrder(Order order);
    void updateInventory(Order order);
}

public class OrderManager {
    public void setOrderDao(OrderDao orderDao) {
        this.orderDao = orderDao;
    }

    //业务方法
    public void placeOrder(Order order) {
        orderDao.saveOrder(order);
        orderDao.updateInventory(order);
    }
}

三、Spring数据访问异常体系

1、为了将数据访问层与应用程序的其它部分进行隔离,Spring提供贯穿DAO框架的统一异常体系
2、数据访问框架中,JDBC需强制捕获SQLException异常(问题复杂,难以恢复,受查异常);Hibernate提供独有的异常体系,可针对特定的数据访问问题,但不通用
3、Spring提供的数据访问异常体系,提供多个数据访问异常分别描述对应问题

4、Spring异常体系不与特定持久化方法相关;异常均继承自DataAccessException(非受查异常),不需要捕获

四、数据访问模板化

1、模板方法模式:将过程中与特定实现相关的部分委托给接口,接口的不同实现定义了过程中的具体行为
2、Spring将数据访问过程中固定的和可变的部分划分为:模板(template)和回调(callback)

简单的数据访问过程:
1)准备数据源
2)开启一个事务
3)在事务当中执行数据访问的逻辑
4)返回结果数据
5)提交或者回滚事务
6)回收资源,处理异常
3、Spring的DAO模板类处理数据访问的固定部分——事务控制、资源管理和异常处理等
4、自定义回调对象处理应用程序相关的数据访问——创建语句、绑定参数、处理结果集等
5、框架目标:只需关心数据访问逻辑
6、针对不同的持久化平台,Spring提供多个可选的模板

Spring为JDBC提供了三个模板
7、直接使用JDBC,可选择JdbcTemplate
8、使用对象关系映射框架(ORM),可选HibernateTemplate、JpaTemplate等
9、示例:使用JDBC模板的订单DAO
public class JdbcOrderDao implements OrderDao {
    private JdbcTemplate jdbcTemplate;
    public void setJdbcTemplate(JdbcTemplate template) {
        this.jdbcTemplate = template;
    }
    public void saveOrder(Order order) {
        jdbcTemplate.update(...);
    }
}

五、使用DAO支持类


1、基于模板-回调设计,Spring提供DAO支持类,将业务相关DAO类作为它的子类
2、编写应用程序业务相关DAO实现时,可以继承DAO支持类并调用模板获取方法来直接访问底层的数据访问模板
3、如需要访问底层的持久化平台,每个DAO支持类能访问其与数据库进行通信的类
4、Spring不仅提供多个数据访问模板实现,还为每种模板提供对应的DAO支持类

类名以Support结尾
5、示例:使用JDBC DAO支持类的订单DAO
public class JdbcOrderDao extends JdbcDaoSupport implements OrderDao {
    public void saveOrder(Order order) {
        getJdbcTemplate().update(...);
    }
}
由DAO支持类持有模板,使代码更为简洁

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值