• 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>
  • 相关阅读:
    poj1006生理周期(中国剩余定理)
    Sort the Array
    pojBuy Tickets2828线段树或者树状数组(队列中倒序插队)
    poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)
    将数据转化成字符串时:用字符串的链接 还是 StringBuilder
    poj 2031Building a Space Station(几何判断+Kruskal最小生成树)
    java中同步嵌套引起的死锁事例代码
    poj 1905Expanding Rods
    (单例设计模式中)懒汉式与饿汉式在多线程中的不同
    HDU 1024Max Sum Plus Plus(最大m字段和)
  • 原文地址:https://www.cnblogs.com/leo-chen-2014/p/4700180.html
Copyright © 2020-2023  润新知