zoukankan      html  css  js  c++  java
  • Hibernate(3)配置文件hibernate.cfg.xml

    5.配置文件
    Hibernate 配置文件主要用于配置数据库连接和 Hibernate 运行时所需的各种属性,每个 Hibernate 配置文件对应一个 Configuration 对象
    Hibernate配置文件可以有两种格式:
    ①hibernate.properties
    ②hibernate.cfg.xml
    hibernate.cfg.xml的常用属性:
    JDBC 连接属性
    connection.url:数据库URL
    connection.username:数据库用户名
    connection.password:数据库用户密码
    connection.driver_class:数据库JDBC驱动
    dialect:配置数据库的方言,根据底层的数据库不同产生不同的 sql 语句,Hibernate 会针对数据库的特性在访问时进行优化
    C3P0 数据库连接池属性
    hibernate.c3p0.max_size: 数据库连接池的最大连接数
    hibernate.c3p0.min_size: 数据库连接池的最小连接数
    hibernate.c3p0.timeout: 数据库连接池中连接对象在多长时间没有使用过后,就应该被销毁
    hibernate.c3p0.max_statements: 缓存 Statement 对象的数量
    hibernate.c3p0.idle_test_period: 表示连接池检测线程多长时间检测一次池内的所有链接对象是否超时.
    连接池本身不会把自己从连接池中移除,而是专门有一个线程按照一定的时间间隔来做这件事,这个线程通过比较连接对象最后一次
    被使用时间和当前时间的时间差来和 timeout 做对比,进而决定是否销毁这个连接对象。
    hibernate.c3p0.acquire_increment: 当数据库连接池中的连接耗尽时, 同一时刻获取多少个数据库连接
    其他
    show_sql:是否将运行期生成的SQL输出到日志以供调试。取值 true | false
    format_sql:是否将 SQL 转化为格式良好的 SQL . 取值 true | false
    hbm2ddl.auto:在启动和停止时自动地创建,更新或删除数据库模式。取值 create | update | create-drop | validate
    hibernate.jdbc.fetch_size:实质是调用 Statement.setFetchSize() 方法设定 JDBC 的
    Statement 读取数据的时候每次从数据库中取出的记录条数。例如一次查询1万条记录,对于Oracle的JDBC驱动来说,
    是不会 1 次性把1万条取出来的,而只会取出 fetchSize 条数,当结果集遍历完了这些记录以后,再去数据库取
    fetchSize 条数据。因此大大节省了无谓的内存消耗。Fetch Size设的越大,读数据库的次数越少,速度越快;
    Fetch Size越小,读数据库的次数越多,速度越慢。Oracle数据库的JDBC驱动默认的Fetch Size = 10,
    是一个保守的设定,根据测试,当Fetch Size=50时,性能会提升1倍之多,当 fetchSize=100,性能还能继续提升20%,
    Fetch Size继续增大,性能提升的就不显著了。并不是所有的数据库都支持Fetch Size特性,例如MySQL就不支持。
    hibernate.jdbc.batch_size:设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,
    类似于设置缓冲区大小的意思。batchSize 越大,批量操作时向数据库发送sql的次数越少,速度就越快。测试结果是
    当Batch Size=0的时候,使用Hibernate对Oracle数据库删除1万条记录需要25秒,Batch Size = 50的时候,
    删除仅仅需要5秒!Oracle数据库 batchSize=30 的时候比较合适。

    <!-- 配置文件 -->
        <hibernate-configuration>
            <session-factory>
            <!-- 配置链接数据库的基本信息 -->
                <!-- 数据库连接的URL -->
                <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_xml</property>
                <!-- 数据库驱动 -->
                <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
                <!-- 数据库用户名 -->
                <property name="hibernate.connection.username">root</property>
                <!-- 数据库密码 -->
                <property name="hibernate.connection.password">root</property>
    
            <!-- 配置Hibernate的基本信息 -->   
                <!-- 程序运行时是否在控制台输出执行的SQL语句 -->
                <property name="hibernate.show_sql">true</property>
                <!-- 是否对SQL进行格式化 -->
                <property name="format_sql">true</property>
                <!-- 指定生成表的策略 -->
                <property name="hbm2ddl.auto">update</property>
                <!-- 配置Hibernate方言,即使用的不同的数据库类型,该方言支持事务 -->
                <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
                <!-- 数据库编码方式 -->
                <property name="Connection.characterEncoding">UTF-8</property>
                <!-- 
                    validate:加载hibernate时,验证创建数据库表结构,启动时验证现有schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新
                    create:每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
                    create-drop:加载hibernate时创建,退出是删除表结构
                    update:加载hibernate自动更新数据库结构
                 -->
                <property name="hbm2ddl.auto">update</property>
                <!-- 设置事务的隔离级别 -->
                <property name="hibernate.connection.isolation">2</property>
                <!-- 删除对象后,使其OID置位null -->
                <property name="hibernate.use_identifier_rollback">true</property>
    
            <!-- 配置C3P0数据源 -->  
                <!-- 数据库连接池的最大连接数 -->
                <property name="hibernate.c3p0.max_size">10</property>
                <!-- 数据库连接池的最小连接数 -->
                <property name="hibernate.c3p0.min_size">5</property>
                <!-- 当数据库连接池中的连接耗尽时, 同一时刻获取多少个数据库连接 -->
                <property name="hibernate.c3p0.acquire_increment">2</property>
                <!-- 表示连接池检测线程多长时间检测一次池内的所有链接对象是否超时 -->
                <property name="hibernate.c3p0.idle_test_period">2000</property>
                <!-- 数据库连接池中连接对象在多长时间没有使用过后,就应该被销毁 -->
                <property name="hibernate.c3p0.timeout">2000</property>
                <!-- 缓存 Statement 对象的数量 -->
                <property name="hibernate.c3p0.max_statements">10</property>
                <!-- 设定 JDBC 的 Statement 读取数据的时候每次从数据库中取出的记录条数 -->
                <property name="hibernate.jdbc.fetch_size">100</property>
                <!-- 设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小 -->
                <property name="jdbc.batch_size">30</property>
            <!-- 配置映射文件时,这两种方法只能使用其中之一,同时使用会报错 -->
                <!--使用配置文件时: 加载映射文件,注意使用的是斜杠作为分割符,有文件的后缀名 -->
                <mapping resource="com/test/withXml/entity/User.hbm.xml"></mapping>
                <!-- 使用注解时:加载持久化类文件,注意使用的是圆点作为分割符,文件的后缀名 -->
                <!-- <mapping class="com.test.withAnnotation.entity.UsersAnno"/> -->
            </session-factory>
        </hibernate-configuration>  
    
  • 相关阅读:
    【分享】IT产业中的三大定理(二) —— 安迪&比尔定理 (Andy and Bill's Law)
    【分享】IT产业中的三大定理(一) —— 摩尔定理(Moore's Law)
    Linux(Ubuntu)下也能用搜狗输入法了!!!
    聊聊付费软件
    JSP中使用Spring注入的Bean时需要注意的地方
    Spark (十二) Spark Streaming详解
    Kafka(一) 初识
    Spark (十一) spark使用hive的元数据信息
    Spark (十) Spark 的种类型Join
    Spark 学习(九) SparkSQL 函数自定义和数据源
  • 原文地址:https://www.cnblogs.com/tengpengfei/p/10453961.html
Copyright © 2011-2022 走看看