在Spring中配置Hibernate和单独配置Hibernate的区别
4个回答
2017-06-21
展开全部
首先说下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类里写的代码要少。
展开全部
简述Spring:
Spring 是一个Bean容器,也是Bean Manager,用它负责创建bean,并且管理bean的生命周期,是我们采用框架式开发不可缺少的组件。
自己配置Hibernate和交给Spring管理的区别
Hibernate可以单独使用,自己来管理Bean的生命周期和创建初始化,但是相比较采用Spring来管理还是Spring管理较优,因为单独使用所有的Bean,包括SessionFactory之类的关键Bean,都是由我们自己管理。而交给Spring管理Bean,我们不需要对它们的生命周期、以及Bean对象的单例、多例、lazy等进行过多的操作。
结论:
建议用Spring管理,自己不用做那么多工作,而且效率上更优。
Spring 是一个Bean容器,也是Bean Manager,用它负责创建bean,并且管理bean的生命周期,是我们采用框架式开发不可缺少的组件。
自己配置Hibernate和交给Spring管理的区别
Hibernate可以单独使用,自己来管理Bean的生命周期和创建初始化,但是相比较采用Spring来管理还是Spring管理较优,因为单独使用所有的Bean,包括SessionFactory之类的关键Bean,都是由我们自己管理。而交给Spring管理Bean,我们不需要对它们的生命周期、以及Bean对象的单例、多例、lazy等进行过多的操作。
结论:
建议用Spring管理,自己不用做那么多工作,而且效率上更优。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2018-07-26 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
spring可以托管hibernate的配置,可以使用spring来配置hibernate,而不用增加hibernate.cfg.xml文件,可以让spring来控制hibernate的运行包括事务,配置等,将hibernate集成到spring中协调工作
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
单独配置比较全面,在spring 中配置,有的选项是不能配的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询