从零配置hibernate

  hibernate的配置文件主要是两大块:hibernate.cfg.xml(主配置文件)和**.hbm.xml(映射文件),再细分的话主配置文件又分为基本配置和拓展配置,映射文件又分为一对多,多对多等。

  首先就从最基本的配置文件说起: 

<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="connection.username">root</property>
        <property name="connection.password">pwd</property>

        <property name="hbm2ddl.auto">update</property>
        <mapping resource="cn/iot/domain/person.hbm.xml"></mapping>
    </session-factory>

</hibernate-configuration>

  这个就是最基本的配置文件了,包含数据源的信息,由映射文件生成表以及映射文件。

  其他常用的配置还有连接池的配置以及二级缓存的配置。

  虽然hibernate有内置的连接池,但是并不推荐使用,而且在hibernate3时,第三方的DBCP连接池也不推荐使用。下面主要说明常用的C3P0和Proxool的配置。

  C3P0的配置:

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.timeout">120</property>        <!--获得连接的最长时间-->
<property name="hibernate.c3p0.max_statements">100</property>     <!--最大的PreparedStatement数量--><property name="hibernate.c3p0.idle_test_period">120</property>  <!--清理线程多长时间清理一次--><property name="hibernate.c3p0.acquire_increment">2</property>  <!--连接用完后一次获取连接的数量-->

  proxool的配置: 首先配置好proxool.xml文件,再在hibernate.cfg.xml中导入

<?xml version="1.0" encoding="UTF-8"?>
<!-- the proxool configuration can be embedded within your own application‘s.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
    <proxool>
        <!--连接池的别名-->
        <alias>DBPool</alias>
        <!--proxool只能管理由自己产生的连接-->
        <driver-url>
            jdbc:mysql://localhost:3306/WebShop?user=root&amp;password=&amp;useUnicode=true&amp;characterEncoding=GB2312
        </driver-url>
        <!—JDBC驱动程序-->
        <driver-class>com.mysql.jdbc.Driver</driver-class>
        <driver-properties>
            <property name="user" value="root"/>
            <property name="password" value=""/>
        </driver-properties>
        <!-- proxool自动检查各个连接状态的时间间隔(毫秒),检查到空闲的连接就马上回收,超时的销毁-->
        <house-keeping-sleep-time>90000</house-keeping-sleep-time>
        <!-- 当没有空闲连接可以分配时在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->
        <maximum-new-connections>20</maximum-new-connections>
        <!-- 最少保持的空闲连接数-->
        <prototype-count>5</prototype-count>
        <!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定-->
        <maximum-connection-count>100</maximum-connection-count>
        <!-- 最小连接数-->
        <minimum-connection-count>10</minimum-connection-count>
    </proxool>
</something-else-entirely> 

  在hibernate.cfg.xml中导入

<?xml version=‘1.0‘ encoding=‘UTF-8‘?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
    <property name="hibernate.connection.provider_class">
        org.hibernate.connection.ProxoolConnectionProvider
    </property>
    <!--在proxool.xml中取得别名-->
    <property name="hibernate.proxool.pool_alias">DBPool</property>
    <property name="hibernate.proxool.xml">proxool.xml</property>
    <property name="show_sql">true</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>      

    <mapping resource="" />
</session-factory>
</hibernate-configuration>    

二级缓存的配置:常用的缓存如下

组件 Provider类 类型 集群 查询缓存
Hashtable org.hibernate.cache.HashtableCacheProvider 内存 不支持 支持
EHCache org.hibernate.cache.EhCacheProvider 内存,硬盘 不支持 支持
OSCache org.hibernate.cache.OSCacheProvider 内存,硬盘 支持 支持
SwarmCache org.hibernate.cache.SwarmCacheProvider 集群 支持 不支持
JBoss TreeCache org.hibernate.cache.TreeCacheProvider 集群 支持 支持

下面用EHCache的配置来说明二级缓存的配置:

  配置二级缓存需要三步:1、配置ehcache.xml  2、配置hibernate.cfg.xml  3、配置**.hbm.xml

  首先配置ehcache.xml :

    <?xml version="1.0" encoding="UTF-8"?>
    <ehcache>
      <!--如果缓存中的对象存储超过指定的缓存数量的对象存储的磁盘地址-->
      <diskStore path="D:/ehcache"/>  

      <!-- 默认cache:如果没有对应的特定区域的缓存,就使用默认缓存       eternal :设置是否永远不过期       timeToIdleSeconds :对象处于空闲状态的最多秒数后销毁       timeToLiveSeconds :对象处于缓存状态的最多秒数后销毁       overflowToDisk :当缓存中的数量超出maxElementsInMemory时是否溢出到硬盘       maxElementsInMemory :缓存在内存中的最大数目       maxElementsOnDisk:缓存在磁盘上的最大数目       memoryStoreEvictionPolicy:缓存算法,有LRU(默认)、LFU、LFU     -->
      <defaultCache maxElementsInMemory="10000"
                    eternal="false"
                    timeToIdleSeconds="300"
                    timeToLiveSeconds="600"
                    overflowToDisk="false"/>
      <!-- 指定区域cache:通过name指定,name对应到Hibernate中的区域名即可-->
      <cache name="cn.iot.student"
                    eternal="false"
                    maxElementsInMemory="100"
                    timeToIdleSeconds="1200"
                    timeToLiveSeconds="1200"
                    overflowToDisk="false">
      </cache>  

    </ehcache>  

  对于Ehcache的overflowToDisk如果这个属性为true,那么要求缓存的数据必须是可序列化的,如果不是可序列化的,ehcache将在日志中打印这个错误(文档中仅指出了这点),并且调用 memoryStoreEvictionPolicy设置的策略(例如LRU)移除内存中的一个缓存元素再放入新的Element,同时触发 CacheEventListener的notifyElementEvicted方法。

  然后再配置hibernate.cfg.xml

    <hibernate-configuration>
       <session-factory>  

          ......  

          <!-- 开启二级缓存 -->
          <property name="hibernate.cache.use_second_level_cache">true</property>
          <!-- 启动"查询缓存"如果想缓存使用findall()、list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集,必须配置此项-->
          <property name="hibernate.cache.use_query_cache">true</property>
          <!-- 设置二级缓存插件EHCache的Provider类-->
          <property name="hibernate.cache.provider_class">
             org.hibernate.cache.EhCacheProvider
          </property>
          <!-- 二级缓存区域名的前缀 -->
          <!--<property name="hibernate.cache.region_prefix">test</property>-->
          <!-- 高速缓存提供程序 -->
          <property name="hibernate.cache.region.factory_class">
             net.sf.ehcache.hibernate.EhCacheRegionFactory
          </property>
          <!-- Hibernate4以后都封装到org.hibernate.cache.ehcache.EhCacheRegionFactory -->
          <!-- 指定缓存配置文件位置 -->
          <property name="hibernate.cache.provider_configuration_file_resource_path">
             ehcache.xml
          </property>
          <!-- 强制Hibernate以更人性化的格式将数据存入二级缓存 -->
          <property name="hibernate.cache.use_structured_entries">true</property>  

          <!-- Hibernate将收集有助于性能调节的统计数据 -->
          <property name="hibernate.generate_statistics">true</property>  

          ......  

       </session-factory>
    </hibernate-configuration>  

  最后是在每个实体的**.hbm.xml中为类或者集合配置缓存策略:

  

    <?xml version="1.0" encoding=‘UTF-8‘?>
    <!DOCTYPE hibernate-mapping PUBLIC
                                "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
    <hibernate-mapping>
       <class>
           <!-- 设置该持久化类的二级缓存并发访问策略 read-only read-write nonstrict-read-write transactional-->
           <class name="cn.java.test.model.User" table="TBL_USER">
                  <cache usage="read-write"/>
           ......
       </class>
    </hibernate-mapping>  

  到这里就完成了hibernate的一些基本配置。

时间: 2024-10-18 14:17:29

从零配置hibernate的相关文章

菜鸟学Struts2——零配置(Convention )

又是周末,继续Struts2的学习,之前学习了,Struts的原理,Actions以及Results,今天对对Struts的Convention Plugin进行学习,如下图: Struts Convention支持零配置进行开发,也就是约定约定优于配置的方式. (1)环境准备 使用Convention Plugin进行开发,需要引入struts2-convention-plugin,完整的pom.xml依赖如下: 1 <dependency> 2 <groupId>org.apa

Struts2零配置介绍(约定访问)

从struts2.1开始,struts2 引入了Convention插件来支持零配置,使用约定无需struts.xml或者Annotation配置 需要 如下四个JAR包 插件会自动搜索如下类 action.actions.struts.struts2包下所有Java类 所有实现了com.opensymphony.xwork2.Action的Java类 所有类名以Action结尾的Java类 下面类名都符合Convention插件 cn.yzu.struts2.HelloAction cn.yz

JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置

Action接受请求参数 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装 Struts2和MVC定义关系 StrutsPrepareAndExecuteFilter:控制器 在Struts2中action是什么?(Struts2是一个MVC框架) V:jsp M:action C:action StrutsPrepareAndExecuteFilter Struts2提供了三种数据封装

Spring4.X + spring MVC + Mybatis3 零配置应用开发框架搭建详解(1) - 基本介绍

Spring4.X + spring MVC + Mybatis3 零配置应用开发框架搭建详解(1) - 基本介绍 spring集成 mybatis Spring4.x零配置框架搭建 两年前一直在做后台的纯Java开发,很少涉及web开发这块,最近换了个纯的互联网公司,需要做Web后台管理系统,之前都是用xml配置的项目,接触了公司Spring4.x的零配置项目,觉得非常有感觉,不仅仅配置简单,而且条理清晰,所以,这里把学习的内容记录下来,一来加深对这块技术的印象,另外准备做个简单的教程,如果给

SpringMVC4零配置

这里对SpringMVC零配置做一个简单的说明 spring4中提供了大量的注解来支持零配置,简要说明如下: @Configuration : 类似于spring配置文件,负责注册bean,对应的提供了@Bean注解.需要org.springframework.web.context.support.AnnotationConfigWebApplicationContext注册到容器中. @ComponentScan : 注解类查找规则定义 <context:component-scan/>

在Eclipse-jee-neon中配置Hibernate(jbosstools)

这个星期非常忙碌,但坚持写博客,我先说的就是,这几周都是围绕Eclipse的安装插件,之后我会更加对我所学习到的知识来进行总结,由于我的周末都非常疲劳,所以我就配步骤的图片就不po文字了,看过我之前的博客都知道这些都是简单的配置.Eclipse-jee-neon中配置Hibernate插件主要用到jbosstools. 访问http://tools.jboss.org/downloads/

Hibernate笔记①--myeclipse制动配置hibernate

Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命 意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任. Hibernate笔记①--myeclipse制动配置hibernate

spring配置hibernate的sessionFactory的几种方法

分类: JAVA Spring Hibernate 2013-01-27 20:47  1851人阅读  评论(0)  收藏  举报 spring配置hibernate的sessionFactory 之前用spring2+hibernate3+struts2开发了一个彩信发布系统,由于第一次使用此架构,造成applicationContext.xml中的配置非常冗长,而且经常因为更改一个小配置项(例:数据库ip.用户名.密码等)将此文件作修改,这及不利于项目维护,万一粗心造成其他地方变动,会对本

springMVC零配置吐槽

此时此刻,哥哥我不得不大大的吐槽一下.从github上down下来一个spring-mvc的chat演示样例,牛逼作者用的是注解的方式,项目全然零配置.而我眼下用的springMVC框架,还是在xml里面配置,所以,在用这个样例的时候,出现了一些小意外,比方,并不能非常好的与我如今的框架集成.天朝用springMVC框架的实在太少了,准确来说,是总结springMVC框架的大牛实在太少了.只是最后经过百般鼓捣,就在前一分钟,能用了,集成成功了.真尼玛幸福.springMVC零配置吐槽,布布扣,b