Hibernate+spring整合相关

来源:互联网 发布:上淘宝开店要钱吗 编辑:程序博客网 时间:2024/05/18 20:11

其实,Hibernate+struts或者struts+spring整合,是没什么大问题的,至于为什么讲解spring+Hibernate的整合呢,是因为。里面涉及到Hibernate对spring 的托管的问题!!

所以就在这里唠叨一下了!!

首先呢,还是按顺序,建议先添加对spring的支持,然后再添加对Hibernate的支持!

 

第一步:新建一个web项目

建好项目后,添加相关spring的jar包,至于应该添加哪些包,看你自己需要那些了,在这里不再罗嗦~~

然后,点击右键---->myeclipse------>add  spring capabilities...    然后按要求,一步一步配置即可!

之后,你就会发现,在你src根目录下多出了一个applacationContext.xml文件~~,这就是spring的配置文件了!!

 

接下来,按照上述步骤,添加Hibernate的支持~~~

 

配置完之后,你就会发现,又多出了一个文件hibernate.cfg.xml文件,这是hibernate的配置文件,可在里设置一些配置信息!

这时候,运行项目,没什么错误,就可以建立相关包 了,包怎么命名,在这里不再多说!

 

在这里我们会发现,以前单纯的利用Hibernate来来对数据库进行操作的话,还得建立sessionFactory,打开session,建立transaction等

觉得很麻烦!!!

那么有没有一种可以简化Hibernate的操作呢???答案是必须有啊!!

 

这时候,就需要设置Hibernate对spring的托管了!

 

spring会提供HibernateTemplate,HibernateDaoSupport,HibernateCallback三个API对数据库进行操作!!

至于这三个类都有什么用,大家可以参考《SSH的基础整合相关》博文,在这里不再多说!

 

好了,那我们就开始配置了!!

 

Hibernate.cfg.xml

 

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   --><hibernate-configuration>    <session-factory>        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>        <property name="connection.url">jdbc:mysql://localhost:3306/firstspring</property>        <property name="connection.username">root</property>        <property name="connection.password">root</property>        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>        <property name="hibernate.connection.autocommit">true</property><!-- 没有这句话,用hibernateTemplate.save()保存失败 -->    <mapping resource="com/model/User.hbm.xml"/>    </session-factory></hibernate-configuration>


 

applactionContext.xml

 

<?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:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">    <!-- Hibernate托管spring第一步:,加载sessionFactory文件,产生sessionFactory对象 -->    <bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="configLocation" value="classpath:hibernate.cfg.xml"></property></bean>    <!-- Hibernate托管spring第二步:,产生HibernateTamplate模板对象,并注入sessionFactory对象 -->        <bean name="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean>    <!--Transaction事务托管spring第一步:,产生HibernateTransactionManager对象,并注入sessionFactory对象 --><bean name="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><!--事务托管有一点类似AOP的思想,针对类的方法进行事务设置,是其思想的一个延伸-->    <!-- Transaction事务托管spring第二步:生成事务代理bean,并将事务管理Manager注入,并设置属性以及目标类。          (也可以不设置生成事务代理bean,可以使用TransactionInterceptor来针对多个类进行事务过滤,如:第三步 )-->           <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"><property name="transactionManager"><ref bean="transactionManager" /></property>        <property name="transactionAttributes">                <!--这对以下方法设置,设置以get开头的方法为 采用requeired事务策略,并设置为可读--><props>             <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>             <prop key="*">PROPAGATION_REQUIRED</prop>                     </props>        </property>        <!--   目标类,就是针对该类里的方法进行事务设置 -->        <property name="target">        <ref bean="userdaoimpl"></ref>        </property>        </bean>                <!--                          第三步                  <bean id="transactionInterceptor"class="org.springframework.transaction.interceptor.TransactionInterceptor"><property name="transactionManager"><ref bean="transactionManager" /></property><property name="transactionAttributes"><props><prop key="get*">PROPAGATION_REQUIRED, readOnly</prop><prop key="*">PROPAGATION_REQUIRED</prop></props></property></bean><beanclass="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><property name="beanNames"><list><value>UserDAO</value></list></property><property name="interceptorNames"><list><value>transactionInterceptor</value></list></property></bean>           -->            <bean name="userdaoimpl" class="com.daoImpl.UserDaoImpl">   <property name="hibernateTemplate"><ref bean="hibernateTemplate"/></property>只要继承HibernateDaoSupport,必须将hibernateTemplate进行注入   </bean>    <bean name="loginregistserviceimpl" class="com.serviceImpl.LoginRegistServiceImpl">   <property name="userdao"><ref bean="userdaoimpl"/></property>   </bean>   <bean name="mainserviceimpl" class="com.serviceImpl.MainServiceImpl">   <property name="userdao"><ref bean="userdaoimpl"/></property>   </bean>   </beans>


 在web.xml中添加以下代码

 

<context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:applicationContext.xml</param-value><!-- 指定applicationContext.xml的位置,是项目启动时,预加载 -->    </context-param>    <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>


 

 

 

 

 

 

 

这就是一些基础配置了~~~

 

添加好之后,就可以利用那三个类进行操作了,

 

 

这里涉及到spring的两大功能:Ioc控制反转(依赖注入)和AOP面向切面思想。

大家可以参考网上相关资料,这里不再多说!!

 

强烈给大家推荐一本SSH整合入门书籍《java web 程序设计与项目实践》,这本书讲的不怎么深入,面向实战!比较适合初学者!看完之后可以看李刚老师的《J2EE轻量级》

这本书讲得很详细!但个人觉得不适合初学者!

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击