在Spring中配置Hibernate和单独配置Hibernate的区别
2015-12-20 16:51
393 查看
首先说下Spring和Hibernate的几个特征:
Spring:自动依赖注入,类都可以被当成bean使用。
Hibernate:会话工厂sessionfactory,事务管理器transaction。
如果只使用Hibernate,那么当你操作数据库的时候,需要敲诸如:
Configuration conf = new Configuration().configure();
SessionFactory sf = conf.buildSessionFactory();
Session sess = sf.openSession();
Transaction tx = sess.beginTransaction();
然后在session里操作数据库方法,在tx里提交。
但是当你使用Spring,在Spring里配置Hibernate时候,
首先是会话工厂可以被当作一个bean来写入Spring配置文件当中,例如:
<bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource”>
<property name=”url” value=”jdbc:jtds:sqlserver://localhost:1433/test”>
</property>
<property name=”driverClassName” value=”net.sourceforge.jtds.jdbc.Driver”>
</property>
<property name=”username” value=”sa”></property>
<property name=”password” value=”123456″></property>
</bean>
<bean id=”sessionFactory” class=”org.springframework.orm.hibernate4.LocalSessionFactoryBean”>
<property name=”dataSource”>
<ref bean=”dataSource” />
</property>
<property name=”hibernateProperties”>
<props>
<prop key=”hibernate.dialect”>
org.hibernate.dialect.SQLServerDialect
</prop>
</props>
</property>
<property name=”mappingResources”>
<list>
<value>com/domain/Users.hbm.xml</value>
</list>
</property>
</bean>
在sessionfactory这个bean里配置数据源和各种属性。当然这个类是Spring包中的,是Spring提供的功能。
然后,Spring同样也可以以bean方式提供给Hibernate一个事务管理器,例如:
<bean id=”transactionManager”
class=”org.springframework.orm.hibernate4.HibernateTransactionManager”>
<property name=”sessionFactory” ref=”sessionFactory” />
</bean>
<tx:annotation-driven transaction-manager=”transactionManager” />
然后是事务拦截器,将事务管理器的bean注入其中,例如:
<bean id=”transactionInterceptor”
class=”org.springframework.transaction.interceptor.TransactionInterceptor”>
<!– 事务拦截器bean需要依赖注入一个事务管理器 –>
<property name=”transactionManager” ref=”transactionManager” />
</bean>
再是可以自动生成业务代理的bean,这个bean将使用事务拦截器,例如:
<!– 定义BeanNameAutoProxyCreator –>
<bean
class=”org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”>
<!– 指定哪些bean自动生成业务代理 –>
<property name=”beanNames”>
<!– 下面是所有需要自动创建事务代理的bean –>
<list>
<value>mgr</value>
</list>
<!– 此处可增加其他需要自动创建事务代理的bean –>
</property>
<!– 下面定义BeanNameAutoProxyCreator所需的事务拦截器 –>
<property name=”interceptorNames”>
<list>
<!– 此处可增加其他新的Interceptor –>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
那么,我们在其中写的自动创建事务代理的id为mgr的bean是这样的:
<bean id=”mgr” class=”com.service.impl.ActionManagerImpl”>
<property name=”usersDAO” ref=”usersDAO” />
</bean>
其中,usersDAO会被自动注入。
我们在usersDAO里不需要像之前要创建配置、会话工厂、事务这么复杂,只需要用getCurrentSession()下的各种方法就可以了。会帮你自动获取当前会话。
配置起来过程会略多,但是总体写的代码绝对比单独用hibernate然后在DAO类里写的代码要少。
Spring:自动依赖注入,类都可以被当成bean使用。
Hibernate:会话工厂sessionfactory,事务管理器transaction。
如果只使用Hibernate,那么当你操作数据库的时候,需要敲诸如:
Configuration conf = new Configuration().configure();
SessionFactory sf = conf.buildSessionFactory();
Session sess = sf.openSession();
Transaction tx = sess.beginTransaction();
然后在session里操作数据库方法,在tx里提交。
但是当你使用Spring,在Spring里配置Hibernate时候,
首先是会话工厂可以被当作一个bean来写入Spring配置文件当中,例如:
<bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource”>
<property name=”url” value=”jdbc:jtds:sqlserver://localhost:1433/test”>
</property>
<property name=”driverClassName” value=”net.sourceforge.jtds.jdbc.Driver”>
</property>
<property name=”username” value=”sa”></property>
<property name=”password” value=”123456″></property>
</bean>
<bean id=”sessionFactory” class=”org.springframework.orm.hibernate4.LocalSessionFactoryBean”>
<property name=”dataSource”>
<ref bean=”dataSource” />
</property>
<property name=”hibernateProperties”>
<props>
<prop key=”hibernate.dialect”>
org.hibernate.dialect.SQLServerDialect
</prop>
</props>
</property>
<property name=”mappingResources”>
<list>
<value>com/domain/Users.hbm.xml</value>
</list>
</property>
</bean>
在sessionfactory这个bean里配置数据源和各种属性。当然这个类是Spring包中的,是Spring提供的功能。
然后,Spring同样也可以以bean方式提供给Hibernate一个事务管理器,例如:
<bean id=”transactionManager”
class=”org.springframework.orm.hibernate4.HibernateTransactionManager”>
<property name=”sessionFactory” ref=”sessionFactory” />
</bean>
<tx:annotation-driven transaction-manager=”transactionManager” />
然后是事务拦截器,将事务管理器的bean注入其中,例如:
<bean id=”transactionInterceptor”
class=”org.springframework.transaction.interceptor.TransactionInterceptor”>
<!– 事务拦截器bean需要依赖注入一个事务管理器 –>
<property name=”transactionManager” ref=”transactionManager” />
</bean>
再是可以自动生成业务代理的bean,这个bean将使用事务拦截器,例如:
<!– 定义BeanNameAutoProxyCreator –>
<bean
class=”org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”>
<!– 指定哪些bean自动生成业务代理 –>
<property name=”beanNames”>
<!– 下面是所有需要自动创建事务代理的bean –>
<list>
<value>mgr</value>
</list>
<!– 此处可增加其他需要自动创建事务代理的bean –>
</property>
<!– 下面定义BeanNameAutoProxyCreator所需的事务拦截器 –>
<property name=”interceptorNames”>
<list>
<!– 此处可增加其他新的Interceptor –>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
那么,我们在其中写的自动创建事务代理的id为mgr的bean是这样的:
<bean id=”mgr” class=”com.service.impl.ActionManagerImpl”>
<property name=”usersDAO” ref=”usersDAO” />
</bean>
其中,usersDAO会被自动注入。
我们在usersDAO里不需要像之前要创建配置、会话工厂、事务这么复杂,只需要用getCurrentSession()下的各种方法就可以了。会帮你自动获取当前会话。
配置起来过程会略多,但是总体写的代码绝对比单独用hibernate然后在DAO类里写的代码要少。
相关文章推荐
- SpringMVC源码阅读(一)
- Java程序数据库连接失败问题
- 使用Spring配置实现bean工厂
- Java异常分类
- JAVA里面的 静态绑定与动态绑定 杂谈
- Java实现压力测试---可输出请求信息、error信息
- JAVA中关于时间的转换
- Java IDE中Access restriction错误的修订
- Java——匿名内部类精讲
- Java JUnit4
- Java开发环境的基本设置
- springMVC map传值问题
- Java枚举类-行为模式最佳实践
- java——泛型1(转)
- Java JUnit的使用
- javaWeb中getContextPath()等方法获取路径的区别
- 《JAVA》中利用《动态规划》实现《背包》问题
- 100个高质量Java开发者博客(20151220更新)
- 关于java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream解决办法
- JAVA并发编程笔记五