spring 持久层

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

 

有了这样的一个SessionFactory代理类之后,在你工程中原来的Hiberante-cfg.xml文件就可以删除了。所有的事情都让Spring管理起来了。
 
Spring管理HibernateDAO
数据访问对像DAO用来完成对数据的操作,它需要和底层的数据进行通信。而SessionFacory是底层数据访的一个管理对像,所以DAO应当依赖与SessionFactory。而此时的SessionFacrory已定让Spring管理起来,所以你的DAO应当依赖与Spring所提供的SessionFacory而不是hiberante本身的SessionFacory。

 

依据Spring的概念,SessionFactory是可以注入到DAO中的。所以在DAO中不要通过Spring上下文对像Context来得到SessionFacory。
你的DAO除了要关注SessionFacory还应做什么事情呢?----具体的数据操作方法如:add,delete,update,find等等。
你在编写这些方法的时候是如何做的呢?是不是在每一个方法中都要处理异常,关注事务等内容呢?有没有更好的方法呢?正如你想像的那样,spring对与hiberante也提供了模板支持。 org.springframework.orm.hibernate3.HibernateTemplate ,你可以使用模板来简化你的开发过程。这样你的开发过程将变得非常的简单。
       可能你看到这里之后,你马上会问那么模板我该如何使用呢?我怎么样把它应用到我的工程中呢?不要着急,等一等,Spring并不推荐你直接配置和使用模板,它提供了一个对模板的封装类。
org.springframework.orm.hibernate3.support. HibernateDaoSupport。你的DAO只需要继承它就OK了,你现在就可以直接使用HibernateDaoSupport所提供的方法:
getHibernateTemplate()就直接可以得到一个模板。然后使用模板提供的数据访问方法来操作数据如:
getHibernateTemplate().save(transientInstance);
getHibernateTemplate().delete(persistentInstance);
getHibernateTemplate().get("com.xaccp.database.dao .BrowRecoder" , id)
等等方法来操作数据。
你的 DAO 类可能如下:

 

 

DAO要与数据库进行通信,那么它所使用的SessionFocatroy该怎么处理呢?其实可以通过Spring的配置文件,给DAO注入一个SessionFacotry如下:
 

Spring管理Hibernate事务

Spring中对Hiberante的事务管理与前面所提到的JDBC的事务管理是一样的。只不过如前面提到的,SpringHibearnte提供了一个专门的事务管理者:

org.springframework.orm.hibernate3.HibernateTransactionManager

此处示例声名式的自动代理方法对Service的事务进行管理

配置事务管理者:

 

创建事务切面:
w
 
依赖关系
此时应用程序的依赖关系如下图所示:
 
n         实现业务接口
n         由Spring注入所需的DAO
n         由Spring给业务方法切入事务
DAO类:
       继承 HibernateDaoSupportHibernateDaoSupport 又依赖 HibernateTemplate,而
HibernateTemplate 依赖SessionFacory HibernateDaoSupport HibernateTemplate由Spring管理。
所以对与DAO类,只需要通过Spring的配置文件注入SessionFactory即可。
HibernateTransactionManager
       管理事务,依 SessionFacory,所以需要Spring注入SessionFacotry
SessionFacory
    与数据源,所以需要通过 Spring注入DataSource
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值