您的位置:首页 > 编程语言 > Java开发

关于hibernate与spring整合

2014-06-26 15:09 369 查看
在整合时去掉了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&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&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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: