整合思路是,使DAO继承HibernateTemplate这个类
HibernateTemplate这个类提供了setSessionFactory()方法用于注入SessionFactory
通过spring获取DAO的时候,注入SessionFactory.
简单说就是在DAO层中继承HibernateTemplate然后直接使用HibernateTemplate提供的CRUD简单的方法, 然后对HibernateTemplate内部的sessionFactory使用Spring的DI来注入;
配置文件这样:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="c" class="Entity.Category">
<property name="name" value="Sony" />
</bean>
<bean name="cdao" class="Dao.CategoryDAO">
<property name="sessionFactory" ref="sf" />
<property name="checkWriteOperations" value="false" />
</bean>
<bean name="sf" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="ds" />
<property name="mappingResources">
<list>
<value>Entity/Category.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=update
</value>
</property>
</bean>
<bean name="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/demo?characterEncoding=UTF-8" />
<property name="username" value="username" />
<property name="password" value="password" />
</bean>
</beans>
要注意的几点:
1.在Hibernate5里面要在继承了HibernateTemplate的DAO层里面进行配置
<property name="checkWriteOperations" value="false" />
否则不能直接写入数据
不知道这里有没有更好的解决办法…我在Stack Overflow上只找到这个办法;
似乎使用hibernate3的话不会有这个问题
2.在hibernate5中没有schema_update这个属性了, 直接配置hibernate.hbm2ddl.auto=update
即可
调整applicationContext.xml以使得其支持c3p0数据库连接池
主要是修改数据源database
- database class
从 org.springframework.jdbc.datasource.DriverManagerDataSource
改为 com.mchange.v2.c3p0.ComboPooledDataSource - driverClassName 改为 driverClass
- url 改为 jdbcUrl
- username 改为 user
- 增加c3p0相关配置
数据源配置如下:
<bean name="ds"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver" />
<property name="jdbcUrl"
value="jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF-8" />
<property name="user" value="root" />
<property name="password" value="admin" />
<!--连接池中保留的最小连接数。-->
<property name="minPoolSize" value="10" />
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize" value="100" />
<!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime" value="1800" />
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement" value="3" />
<!--最大的Statements条数 -->
<property name="maxStatements" value="1000" />
<!--初始化10条连接 -->
<property name="initialPoolSize" value="10" />
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts" value="30" />
<!--每隔60秒发一次心跳信号到数据库,以保持连接的活性 -->
<property name="idleConnectionTestPeriod" value="60" />
</bean>