第4.42课 上课 Spring与Hibernate整合, 在applicati…
4_42

Spring与Hibernate整合
Spring与Hibernate整合:
- 增加Hibernate的jar
- 配置DataSource、SessionFactory.
- Spring为Hibernate提供了如下2个类:
HibernateTemplate: 它是Hibernate持久化操作门面,绝大部分持久化操作,都只要一个方法即可搞定.
HibernateDaoSupport: dao组件的父类,提供了setSessionFactory方法,还提供了getHibernateTemplate().
门面模式(Facade Pattern)
门面模式,当我们完成一个事情,客户端需要与N个组件按顺序交互,此时就可以提供一个门面进行封装,
让客户端只要与门面交互即可.
Controller → Service 封装 N个Dao.
换成门面模式而言:
1. 传入HQL语句和参数.
2. 门面就应该返回查询List.
在applicationContext.xml文件中配置整合Hibernate5
db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///oa?useunicode=true&characterEncoding=utf8&useSSL=true
user=root
password=root
配置DataSource(c3p0连接池)
<!-- 配置属性占位符 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 数据库配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${driver}" />
<property name="jdbcUrl" value="${url}" />
<property name="user" value="${user}" />
<property name="password" value="${password}" />
<!--连接池中保留的最小连接数。 -->
<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" />
<property name="maxStatements" value="1000" />
<property name="initialPoolSize" value="10" />
</bean>
<!-- 数据库配置 end -->
-----------------------------------------------------------------------------------------------
或者通过P短名称进行访问设置:
<!-- 配置dataSource数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"
p:driverClass="${driver}"
p:jdbcUrl="${jdbcUrl}"
p:user="${user}"
p:password="${password}"
p:initialPoolSize="${c3p0.initialPoolSize}"
p:maxPoolSize="${c3p0.maxPoolSize}"
p:minPoolSize="${c3p0.minPoolSize}"
p:maxIdleTime="${c3p0.maxIdleTime}"
p:checkoutTimeout="${c3p0.checkoutTimeout}"/>
配置SessionFactory
<!-- 配置SessionFactory (第一种方式) 注意用到了p短命名空间需要导入命名空间(参考前面课程内容)-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"
p:dataSource-ref="dataSource"
p:configLocation="classpath:hibernate.cfg.xml">
</bean>
<!-- 配置SessionFactory (第二种方式) -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"
p:dataSource-ref="dataSource">
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="packagesToScan">
<array>
<value>org.oa.dto</value>
<value>org.oa.pojo</value>
</array>
</property>
</bean>
<!-- 配置SessionFactory (第三种方式) -->
<!-- Hibernate5配置 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 扫描dto包中的实体 -->
<property name="packagesToScan">
<list>
<value>org.oa.dto</value>
</list>
</property>
<!-- Hibernate属性配置 -->
<property name="hibernateProperties">
<props>
<!-- 数据库方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<!-- 是否显示执行的sql语句 -->
<prop key="hibernate.show_sql">true</prop>
<!-- 是否执行sql语句格式化输出 -->
<prop key="hibernate.format_sql">false</prop>
<!-- 数据库表创建策略 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
浙公网安备 33010602011771号