在applicationContext.xml文件中配置SessionFactory和dataSource的bean

 

在所有的ORM框架中,Spring对Hibernate的支持最好.
Spring提供很多IOC特性的支持,方便处理大部分典型的Hibernate整合问题,如:sessionFactory注入,HibernateTemplate的简化操作,及DAO支持等.
applicationContext.xml文件包含如下部分内容:
<bean id="myDataSource"
		class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost:3306/tenancybj" />
		<property name="username" value="root" />
		<property name="password" value="12345" />
	</bean>

<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="myDataSource" />
		<!--  注释原因:hibernate.cfg.xml  里面已经存在   -->
		<!--  取消注释原因:查询时使用了  from ***  hql语句    -->
		<property name="mappingResources">
			<list>
				<value>domain/UserInfo.hbm.xml</value>
				<value>domain/Customer.hbm.xml</value>
				<value>domain/SupplyMan.hbm.xml</value>
				<value>domain/ProType.hbm.xml</value>
				<value>domain/ProductParam.hbm.xml</value>
				<value>domain/StorageRate.hbm.xml</value>
				<value>domain/HireRec.hbm.xml</value>
				<value>domain/RepairRec.hbm.xml</value>
				<value>domain/SalesRec.hbm.xml</value>
			</list>
		</property>

		<property name="hibernateProperties">
			<value>
				hibernate.dialect=org.hibernate.dialect.MySQLDialect
			</value>
		</property>

	</bean>

SessionFactory由ApplicationContext管理,并随着应用启动时自动加载,可以被处于ApplicationContext管理的任意一个Bean引用,比如DAO.
Spring采用依赖注入为DAO对象注入SessionFactory的引用;
 
Hibernate持久层访问步骤:
1 创建Configuration实例
2 创建SessionFactory实例
3 创建Session实例
4 打开事务
5 开始持久化访问
6 提交事务
7 遇到异常,回滚事务
8 关闭Session
 
Spring提供更简单的方式操作持久层,无须显式地打开Session,也无须在代码中执行任何事务操作语句.
Spring提供HibernateTemplate,用于持久层访问.
 
HibernateTemplate无须显式打开Session及关闭Session,它只要获得SessionFactory的引用,将可以智能打开Session,并在持久化访问结束后关闭Session,程序开发只需完成持久层逻辑,通用的操作则由HibernateTemplate完成
 
在DAO层的实现类中作如下操作:
private HibernateTemplate ht;
    private SessionFactory sessionFactory;
public void save(Person person) {
setHibernateTemplate();
ht.save(person);
System.out.println("saved");
}
public void setHibernateTemplate() {
if(ht==null)
ht = new HibernateTemplate(sessionFactory);

}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
解释:定义sessionFactory,这里的实现类就不能实现HibernateDaoSupport了,因为它里面提供了sessionFactory 和HibernateTemplate的final的方法定义,就不能在子类中覆盖了。
更好的实现方式就是:继承HibernateDaoSupport。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 配置扫描包 --> <context:component-scan base-package="com.example.demo" /> <!-- 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <!-- 配置SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan" value="com.example.demo.entity" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 开启注解事务 --> <aop:config> <aop:pointcut id="txPointcut" expression="execution(* com.example.demo.service.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" /> </aop:config> <bean id="txAdvice" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager" ref="transactionManager" /> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> </beans>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值