关于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&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);
}
}
- 关于hibernate与spring整合
- 关于spring与Hibernate的整合
- 关于spring与Hibernate的整合
- 关于spring与Hibernate的整合
- 关于Spring与hibernate整合的困惑
- spring与hibernate整合
- Spring与Hibernate整合
- hibernate 与spring 整合
- Spring与Hibernate整合
- spring与hibernate整合
- Spring 与Hibernate 整合
- Spring与Hibernate整合
- Spring与Hibernate整合
- Spring与HIbernate整合
- Spring与Hibernate整合
- Spring与Hibernate整合
- Spring与Hibernate整合
- Spring与Hibernate整合
- 元数据专题
- Perl 中的讀寫文件操作
- c3p0的配置解释
- 浅谈DBInputFormat
- spring组件扫描<context:component-scan/>使用详解
- 关于hibernate与spring整合
- JavaScript函数表达式与函数声明的区别
- vs2008 如何创建windows应用程序项目
- java.lang.OutOfMemoryError: Java heap space解决方法
- 黑马程序员_OC学习之内存管理
- 常用协议
- throws与throw区别
- seo的思维与头脑风暴
- SHELL if