spring整合Hibernate其实就是Spring来管理Hibernate的SessionFactory,以及配置事务的操作。
在Hibernate的配置文件中只有一个SessionFactory的节点,可以在这个节点内配置数据库的连接信息和映射文件。
1.而在Spring中,管理数据库连接用到的是dataSource这样一个bean,spring中它的连接类为org.springframework.jdbc.datasource.DriverManagerDataSource,在dataSource中配置数据库连接信息,也可以使用c3p0连接池来连接,需要引入c3p0的包,具体类为com.mchange.v2.c3p0.ComboPooledDataSource。
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost/tx_test"></property>
<property name="username" value="root"></property>
<property name="password" value="HEAVEN"></property>
</bean>
2.此外还需要一个sessionFactory的bean,用来配置Hibernate的属性,如hibernate日志输出和映射文件等。
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>User.hbm.xml</value>
</list>
</property>
</bean>
3.事务处理方面需要配置一个transactionManager的bean,将sessionFactory注入进去。
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
4.如果是采用注解的方式来使用事务,还需要配置开启事务。
<tx:annotation-driven transaction-manager="transactionManager"/>
ps:spring与hibernate的整合很容易出错,一般都是引入包问题,版本不兼容或包冲突等,要仔细分辨一下,一步步去尝试,
我这里用到的jar包有以下:
spring4.17的所有jar包(除spring-aspectJ)
hibernate-core-4.2.1.Final.jar
aopalliance-1.0.jar
com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
com.springsource.org.aspectj.weaver-1.6.8.REALEASE.jar
commons-logging-1.1.3.jar
mysql-connector-java-5.0.8-bin.jar