关于hibernate与spring整合

来源:互联网 发布:live2d mac有哪些 编辑:程序博客网 时间:2024/05/19 03:23

在整合时去掉了hibernate的配置文件,把配置都放到beans.xml之中!

在配置时会遇到两种,一种是注入配置bean,一种是写配置文件,当不是用注解的形式时候,下面的可以进行一对多缓存 。

hibernate主要有两个部分<两部分同时使用好像失败了,如果不需要外键关联的话,那么注解的方式真的十分方便>

一:dataSource配置,可以用dbcp,也可以用连接池如C3P0

二:sessionFactory的配置,主要有映射的xml,包含dataSource等

主要配置文件如下:

<context:component-scan base-package="cn.sprhib.*" />   注释方法,扫描包

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="org.gjt.mm.mysql.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/pf?useUnicode=true&amp;characterEncoding=UTF-8"/>
<property name="user" value="root"/>
<property name="password" value="yanjun2014"/>
<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize" value="1"/>
<!--连接池中保留的最小连接数。-->
<property name="minPoolSize" value="1"/>
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize" value="300"/>
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime" value="60"/>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement" value="5"/>
<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod" value="60"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<!--<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">-->hibernate注释方法
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
   <list>
     <value>com/pojo/Fruits.hbm.xml</value> 
     <value>com/pojo/User.hbm.xml</value>
      <value>com/pojo/Questions.hbm.xml</value> 
     <value>com/pojo/Options.hbm.xml</value>
   </list>
</property>
<property name="hibernateProperties">
<value>
     hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
     hibernate.hbm2ddl.auto=update
     hibernate.show_sql=false
     hibernate.format_sql=false
 </value>
</property>

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

 <tx:advice id="serviceAdvice" transaction-manager="txManager"> 
   <tx:attributes>  
       <tx:method name="add*" propagation="REQUIRED" rollback-for="Throwable"/>
       <tx:method name="save*" propagation="REQUIRED" rollback-for="Throwable"/>
       <tx:method name="del*" propagation="REQUIRED" rollback-for="Throwable"/> 
       <tx:method name="update*" propagation="REQUIRED" rollback-for="Throwable"/>
       <tx:method name="batchUpdate*" propagation="REQUIRED" rollback-for="Throwable"/>
       <tx:method name="submit*" propagation="REQUIRED" rollback-for="Throwable"/>
       <tx:method name="generate*" propagation="REQUIRED" rollback-for="Throwable"/>
       <tx:method name="deploy*" propagation="REQUIRED" rollback-for="Throwable"/>
       <tx:method name="start*" propagation="REQUIRED" rollback-for="Throwable"/>
       <tx:method name="*" read-only="true"/> 
   </tx:attributes> 
    </tx:advice> 
    
    <aop:config proxy-target-class="true"> 
       <aop:pointcut id="servicePointcut" expression="execution(* com.richsum.xnoa.service.impl.*.*(..))"/> 
       <aop:advisor pointcut-ref="servicePointcut" advice-ref="serviceAdvice"/> 
    </aop:config>     


</bean>

spring方面

注解方式:

1.控制hibernate事物

2.注入事物

3.运用<context:component-scan base-package="com"/>搜索包

具体运用:

加<context:component-scan base-package="com"/>

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 当不是用注解的形式时候,下面的可以进行一对多缓存 -->
<!-- <bean id="baseProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"></bean> -->
<!--使用基于注解方式配置事务 -->
<tx:annotation-driven transaction-manager="txManager" ></tx:annotation-driven>

在后面调用的时候运用@Resource不需要get与set   Dao层直接用SessionFactory


第一种非注解方式

配置TransactionInterceptor

<bean id = "transactionManager" class = "org.springframework.orm.hibernate3.HibernateTransactionManager" >   
        <property name = "sessionFactory" ref = "sessionFactory"/>   
    </bean>   
      
    <bean id = "transactionInterceptor" class = "org.springframework.transaction.interceptor.TransactionInterceptor">   
        <property name = "transactionManager" ref = "transactionManager"/>   
        <property name = "transactionAttributes">   
            <props>   
                <prop key="*">PROPAGATION_REQUIRED</prop>              
            </props>   
        </property>   
    </bean>
   <bean id="querstionsDao" class="com.dao.QuerstionsDao" >
<property name="sessionFactory" ref="sessionFactory" ></property>
</bean>
dao层继承HibernateDaoSupport,其他需要set方法

HibernateDaoSupport主要的几个实现调用方法

删除:this.getHibernateTemplate().delete(实体类)

查所有:this.getHibernateTemplate().find(hql)

根据编号查找:this.getHibernateTemplate().load(实体类.class, id);

增加:this.getHibernateTemplate().save(实体类)

修改: this.getHibernateTemplate().update


第二种非注解方式

配置hibernateTemplate

<!-- 配置dataSource选用c3p0方式 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl"
value="jdbc:mysql://localhost:3306/sprhib?useUnicode=true&amp;characterEncoding=utf8" />
<property name="user" value="root" />
<property name="password" value="root" />
<property name="minPoolSize" value="2" />
<property name="maxPoolSize" value="50" />
<property name="initialPoolSize" value="10" />
<property name="maxIdleTime" value="60" />
<property name="acquireIncrement" value="2" />
</bean>


<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>cn/sprhib/model/Users.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
</props>
</property>
</bean>


<!-- 配置hibernateTemplate -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>


<!-- 声明式事务 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
     <property name="sessionFactory" ref="sessionFactory" />
</bean>

dao层调用



@Component("usersDaoImpl")
public class UsersDaoImpl implements UsersDao{


@Resource(name="hibernateTemplate")
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}


@Override
public void addUser(Users user) {
hibernateTemplate.save(user);
}


}










0 0
原创粉丝点击