第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>

posted on 2018-01-31 22:33  東風★破  阅读(161)  评论(0)    收藏  举报

导航