Hibernate的核心配置

Hibernate的设计思路

Hibernate是一种全自动化管理持久化对象的ORM框架,既提供了完全面向对象的封装完整的对象持久化接口(屏蔽db层的差异化,提升代码可移植性),也提供了操作HQL和SQL的半自动化DB访问接口(提供复杂查询的扩展性)。

配置hibernate.cfg.xml和***.hbm.xml文件

文件hibernate.cfg.xml是Hibernate的核心配置文件,用于定义Hibernate与DB交互的核心配置,文件**.hbm.xml是定义多个对象与DB table的映射关系和更新规则。

创建一个典型的hibernate.cfg.xml文件配置如下:

 1 <hibernate-configuration>
 2     <!-- 一个session-factory节点代表一个数据库 -->
 3     <session-factory>
 4         <!-- 1. 数据库连接配置 -->
 5         <property name="hibernate.connection.driver_class">
 6           com.mysql.jdbc.Driver
 7         </property>
 8         <property name="hibernate.connection.url">
 9           jdbc:mysql://localhost:3306/ychenDemo
10         </property>
11         <property name="hibernate.connection.username">root</property>
12         <property name="hibernate.connection.password">root</property>
13         <!-- 2. 根据不同的db方言生成符合当前db语法的sql-->
14         <property name="hibernate.dialect">
15           org.hibernate.dialect.MySQL5Dialect
16         </property>
17         <!-- 3. 显示hibernate在运行时候执行的sql语句 -->
18         <property name="hibernate.show_sql">true</property>
19         <!-- 4. 格式化sql -->
20         <property name="hibernate.format_sql">true</property>
21         <!-- 5. 如果没有表则创建,如果有则更新  -->
22         <property name="hibernate.hbm2ddl.auto">update</property>
23         <!-- 6. 引入ORM对象定义文件  -->
24         <mapping resource="com/leo/domain/User.hbm.xml"/>
25     </session-factory>
26 </hibernate-configuration>

对于hibernate.hbm2ddl.auto而言有四种配置值:
#1 create-drop:程序执行开始重新创建新表,程序执行结束则删除所有的数据和表结构;
#2 create:程序执行开始重新创建新表;
#3 update:推荐值,程序执行开始会检查表是否存在,如果不存在则创建新表,如果存在则检查表结构是否跟配置文件一致,如果不一致则更新表结构;
#4 validate:程序开始会检查表是否存在,如果不存在或者表结构不一致,则会抛异常;

创建基于DBCP PooledDataSource和Spring TxManager的hibernateSessionFactory如下,其中最后三个配置项表示开启并使用二级缓存,factory_class依赖Ehcache,可以有两种选择,EhCacheRegionFactory和SingletonEhCacheRegionFactory,前者用于一个app中支持多个dataSource的场景,后者仅支持一个dataSource的场景,hibernate-ehcache.xml用于配置二级缓存具体的策略;

 1 <!-- Using DBCP as pooled data source -->
 2 <bean id="dataSource" 
 3     class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
 4   <property name="driverClassName" value="${jdbc.driverClassName}"/>
 5   <property name="url" value="${jdbc.url}"/>
 6   <property name="username" value="${jdbc.username}"/>
 7   <property name="password" value="${jdbc.pwd}"/>
 8   <property name="defaultAutoCommit" value="true"/>
 9   <property name="initialSize" value="10000"/>
10   <property name="maxActive" value="10000"/>
11   <property name="maxIdle" value="10000"/>
12   <property name="minIdle" value="10000"/>
13   <property name="maxWait" value="10000"/>
14 </bean>
15 
16 <!-- Using spring transaction -->
17 <bean id="transactionManager" 
18     class="org.springframework.orm.hibernate4.HibernateTransactionManager">
19   <property name="sessionFactory" ref="hibernateSessionFactory"/>
20 </bean>
21 
22 <tx:annotation-driven transaction-manager="transactionManager"/>
23 
24 <!-- Configuring sessionFactory -->
25 <bean id="hibernateSessionFactory" 
26     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
27   <property name="dataSource" ref="dataSource"/>
28   <property name="mappingResources">
29     <list>
30       <value>META-INF/hibernate-named-query.xml</value>
31     </list>
32   </property>
33   <property name="hibernateProperties">
34     <props>
35       <prop key="hibernate.dialect">
36         com.active.services.persistence.SQLServer2005Dialect
37       </prop>
38       <prop key="hibernate.hbm2ddl.auto">none</prop>
39       <prop key="hibernate.connection.release_mode">auto</prop>
40       <prop key="hibernate.show_sql">true</prop>
41       <prop key="hibernate.format_sql">true</prop>
42       <prop key="hibernate.use_sql_comments">true</prop>
43       <prop key="hibernate.generate_statistics">true</prop>
44       <prop key="hibernate.jdbc.use_scrollable_resultset">true</prop>
45       <prop key="hibernate.jdbc.use_streams_for_binary">true</prop>
46       <prop key="hibernate.jdbc.batch_size">100</prop>
47       <prop key="hibernate.cache.region_prefix">hibernate.cache</prop>
48       <prop key="hibernate.cache.use_query_cache">true</prop>
49       <prop key="hibernate.cache.use_second_level_cache">true</prop>
50       <prop key="hibernate.cache.region.factory_class">
51         net.sf.ehcache.hibernate.EhCacheRegionFactory
52       </prop>
53       <prop key="net.sf.ehcache.configurationResourceName">
54         META-INF/hibernate-ehcache-config.xml
55       </prop>
56     </props>
57   </property>
58 </bean>
原文地址:https://www.cnblogs.com/leo-chen-2014/p/4700180.html