Hibernate - hibernate.cfg.xml配置文件详解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Hibernate 配置文件主要用于配置数据库连接和 Hibernate 运行时所需的各种属性。每个 Hibernate 配置文件对应一个 Configuration 对象–这样说不太正确,应该是项目初始化时会实例化Configuration对象,该实例对象(Configuration对象)会读取配置文件配置的属性值为实例对象赋值。

Hibernate 配置文件主要用于配置数据库连接和 Hibernate 运行时所需的各种属性。每个 Hibernate 配置文件对应一个 Configuration 对象–这样说不太正确,应该是项目初始化时会实例化Configuration对象,该实例对象(Configuration对象)会读取配置文件配置的属性值为实例对象赋值。


Hibernate配置文件可以有两种格式:

  • hibernate.properties
  • hibernate.cfg.xml

常用实例如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
      <!-- Hibernate 连接数据库的基本信息 -->
      <property name="connection.username">root</property>
      <property name="connection.password">123456</property>
      <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="connection.url">jdbc:mysql:///hibernate</property>
    <!-- Hibernate 的基本配置 -->
    <!-- Hibernate 使用的数据库方言 -->
    <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
    <!-- 运行时是否打印 SQL -->
      <property name="show_sql">true</property>
      <!-- 运行时是否格式化 SQL -->
      <property name="format_sql">true</property>
      <!-- 生成数据表的策略 -->
      <property name="hbm2ddl.auto">update</property>
      <!-- 设置 Hibernate 的事务隔离级别 -->
      <property name="connection.isolation">2</property>
      <!-- 删除对象后, 使其 OID 置为 null -->
      <property name="use_identifier_rollback">true</property>
      <!-- 配置 C3P0 数据源 -->
      <property name="hibernate.c3p0.max_size">10</property>
      <property name="hibernate.c3p0.min_size">5</property>
      <property name="c3p0.acquire_increment">2</property>
      <property name="c3p0.idle_test_period">2000</property>
      <property name="c3p0.timeout">2000</property>
      <property name="c3p0.max_statements">10</property>
      <!-- 设定 JDBC 的 Statement 读取数据的时候每次从数据库中取出的记录条数 -->
      <property name="hibernate.jdbc.fetch_size">100</property>
      <!-- 设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小 -->
      <property name="jdbc.batch_size">30</property>
      <!-- 需要关联的 hibernate 映射文件 .hbm.xml -->
      <mapping resource="com/**/Customer.hbm.xml"/>
      <mapping resource="com/**//Order.hbm.xml"/>
    </session-factory>
</hibernate-configuration>



【1】JDBC 连接属性


connection.url:数据库URL 。


connection.username:数据库用户名。


connection.password:数据库用户密码 。


connection.driver_class:数据库JDBC驱动 。


dialect:配置数据库的方言,根据底层的数据库不同产生不同的 sql 语句,Hibernate 会针对数据库的特性在访问时进行优化。


如下所示,Hibernate连接Oracle:

<!-- Hibernate 连接数据库的基本信息 -->
<property name="connection.username">scott</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<!-- Hibernate 的基本配置 -->
<!-- Hibernate 使用的数据库方言 -->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>

【2】C3P0 数据库连接池属性

使用maven引入hibernate整合C3P0需要的jar:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>${hibernate.version}</version>
</dependency>


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: 当数据库连接池中的连接耗尽时, 同一时刻获取多少个数据库连接。


实际项目中,通常使用Druid数据源。


【3】Hibernate基本配置

① show_sql

show_sql:是否将运行期生成的SQL输出到日志以供调试。取值 true | false 。

② format_sql

format_sql:是否将 SQL 转化为格式良好的 SQL . 取值 true | false。

③ hbm2ddl.auto


hbm2ddl.auto:在启动和停止时自动地创建,更新或删除数据库模式。取值 create | update | create-drop | validate。

④ hibernate.jdbc.fetch_size

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

hibernate.jdbc.batch_size:设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,类似于设置缓冲区大小的意思。


batchSize 越大,批量操作时向数据库发送sql的次数越少,速度就越快。

测试结果是当Batch Size=0的时候,使用Hibernate对Oracle数据库删除1万条记录需要25秒,Batch Size = 50的时候,删除仅仅需要5秒!Oracle数据库 batchSize=30 的时候比较合适。

【4】hibernate.cfg.xml中的hbm2ddl.auto


该属性可帮助程序员实现正向工程, 即由 java 代码生成数据库脚本, 进而生成具体的表结构 。取值 create | update | create-drop | validate

① create


会根据*.hbm.xml 文件来生成数据表, 但是每次运行都会删除上一次的表 ,重新生成表, 哪怕二次没有任何改变 。

② create-drop


会根据 *.hbm.xml 文件生成表,但是SessionFactory一关闭, 表就自动删除 。

③ update

最常用的属性值,也会根据 *.hbm.xml 文件生成表。但若 .hbm.xml 文件和数据库中对应的数据表的表结构不同, Hiberante 将更新数据表结构,但不会删除已有的行和列。

④ validate

会和数据库中的表进行比较, 若 *.hbm.xml 文件中的列在数据表中不存在,则抛出异常。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
Java 数据库连接 数据库
hibernate正向生成数据库表以及配置——Teacher.hbm.xml
hibernate正向生成数据库表以及配置——Teacher.hbm.xml
|
2月前
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
93 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
6月前
|
XML Java 数据库连接
MyBatis入门——MyBatis XML配置文件(3)
MyBatis入门——MyBatis XML配置文件(3)
74 6
|
2月前
|
XML Java 应用服务中间件
tomcat学习一:tomcat 目录及配置文件学习 server.xml 等
这篇文章是关于Apache Tomcat服务器的目录结构、配置文件(特别是server.xml)的详细介绍和学习指南。
64 0
tomcat学习一:tomcat 目录及配置文件学习 server.xml 等
|
2月前
|
XML 存储 JSON
framework 的配置文件在.netcore里面不能用怎么处理?在.netcore中创建.xml配置文件
framework 的配置文件在.netcore里面不能用怎么处理?在.netcore中创建.xml配置文件
27 0
|
2月前
|
安全 内存技术
【文件上传-配置文件】crossdomain.xml跨域策略配置文件上传
【文件上传-配置文件】crossdomain.xml跨域策略配置文件上传
|
4月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
93 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
5月前
|
存储 缓存 分布式计算
Hadoop配置文件core-site.xml
【7月更文挑战第17天】
279 2
Hadoop配置文件core-site.xml
|
5月前
|
XML 分布式计算 资源调度
Hadoop配置文件mapred-site.xml
【7月更文挑战第18天】
364 7
|
5月前
|
存储 机器学习/深度学习 分布式计算
Hadoop配置文件hdfs-site.xml
【7月更文挑战第17天】
309 5