Hibernate配置方式

Hibernate给人的感受是灵活的,要达到同一个目的,我们可以使用几种不同的办法。就拿Hibernate配置来说,常用的有如下三种方式,任选其一。

  1. 在 hibernate.cfg.xml 中加入元素 <property>、<mapping>,放置在类路径(classpath)的根目录下。
  2. 将 hibernate.properties 放置放在类路径的根目录下。
  3. 可编程的配置方式,即在程序中配置Hibernate的启动参数、加载映射文件,需要用Configuration接口来实现这一方式。

使用hibernate.cfg.xml是我比较喜欢的方式,一方面xml天生的优势——良好的可读性,让配置的意图一目了然。另一方面这是官方推荐使用的,如果同时在hibernate.cfg.xml和hibernate.properties对Hibernate进行了配置,那么前者将覆盖后者。

hibernate.properties可以非常的简洁明了,并且有一种linux配置文件的风格。以#开始一行的注释,用键值对的方式存储配置参数。

对于这两种方式,结果都是一样的。只是看个人喜好。关于配置参数我们稍后讨论。

Configuration类

org.hibernate.cfg.Configuration实例的作用是对Hibernate进行配置,以及对它进行启动。在Hibernate的启动过程中,Configuration类的实例首先读取Hibernate配置文件,加载配置信息,然后加载映射文件,创建一个SessionFactory对象。

实例被设计成启动期间(startup-time)对象,一旦SessionFactory 创建完成它就被丢弃了。

要使用一个Configuration对象,要为它设置两个方面的内容:

  • 数据库连接属性
  • hbm.xml或pojo类

Configuration常用操作函数

1.加载Hibernate配置文件

Configuration cfg=new Configuration().configure("/etc/hibernate.cfg.xml");

或者

Configuration cfg=new Configuration().configure("/etc/hibernate.properties");

2.为Configuration指定映射文件

cfg.addResource("test/User.hbm.xml");

3.为Configuration指定POJO类,Order.hbm.xml根Order.java一个目录

cfg.addClass(test.Order.class);

4.为Configuration指定Hibernate配置属性,当然我们加载了配置文件就不能使用这个方法了。

Configuration cfg = new Configuration()
.addClass(test.User.class)
.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect")
.setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test")
.setProperty("hibernate.order_updates", "true");

5.获得SessionFactory

SessionFactory sessions = cfg.buildSessionFactory();

当所有映射定义被 Configuration 解析后,应用程序必须获得一个用于构造org.hibernate.Session 实例的工厂SessionFactory。这个工厂将被应用程序的所有线程共享,线程安全的全局对象,只需要被实例化一次。单例模式。

Hibernate 允许你的应用程序创建多个SessionFactory 实例。这对 使用多个数据库的应用来说很有用。

hibernate.cfg.xml

hibernate.cfg.xml在文档开头的DTD(文档类型定义)是很复杂的。我们并不需要去理会和记忆他。你可以直接copy它。

hibernate.cfg.xml文档以<hibernate-configuration>为根元素,你可以在其子元素<session-factory>中

  • 加入<property>元素来配置各种参数。

  • 加入<mapping>加载映射文件,resource代表映射文件的路径。

一个hibernate.cfg.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>
<!-- Database connection settings -->
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password">klguang@mysql</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">10</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">
org.hibernate.cache.NoCacheProvider
</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<property name="javax.persistence.validation.mode">none</property>
<mapping resource="hbm/User.hbm.xml" />
<mapping resource="hbm/Event.hbm.xml" />
<mapping resource="hbm/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>

hibernate.properties

对于hibernate.properties作为配置文件的方式,我是不推荐新手使用的。因为,其可读性差,另外众多的配置参数会让初学者不知道如何下手。

在Hibernate发布包的project/etc/,提供了一个hibernate.properties文件,该文件列出了Hibernate 的所有配置参数,但都是用#注释掉了。每一行是一个配置参数,以键值对的方式存在,空格前是key,空格后是value,我们应该将空格改为等号。

对每一个配置参数,文件里都有详细的解释。我们只需要将见面#去掉,并修改其value就可以了。

一个hibernate.properties例子:

#数据库使用的驱动类
hibernate.connection.driver_class=com.mysql.jdbc.Driver
#数据库连接串
hibernate.connection.url=jdbc:mysql://localhost:3306/db
#数据库连接的用户名
hibernate.connection.username=user
#数据库连接的密码
hibernate.connection.password=password
#数据库使用的方言
hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect
#是否打印SQL语句
hibernate.show_sql=true
javax.persistence.validation.mode=none

hibernate.properties没有提供加载映射文件的方式。因此需要通过Configuration的.addResource()方法来加载映射文件或POJO类,Hibernate会自动找到另一方,前提映射文件和POJO类在同一包(目录)中。

Configuration cfg = new Configuration();
cfg.configure("/etc/hibernate.properties");
cfg.addResource("test/User.hbm.xml");
cfg.addClass(test.Order.class);

Hibernate配置参数详解

Hibernate JDBC 属性

属性名

用途

hibernate.connection.driver_class

JDBC driver class

hibernate.connection.url

JDBC URL

hibernate.connection.username

database user

hibernate.connection.password

数据库用户密码

hibernate.connection.pool_size

maximum number of pooled connections

Hibernate 数据源属性

属性名

用途

hibernate.connection.datasource

数据源 JNDI 名字

hibernate.jndi.url JNDI

提供者的 URL(可选)

hibernate.jndi.class JNDI

InitialContextFactory 类(可选)

hibernate.connection.username

数据库用户(可选)

hibernate.connection.password

数据库密码(可选)

可选的配置属性

有大量属性能用来控制 Hibernate 在运行期的行为。它们都是可选的,并拥有适当的默认值。

属性名

用途

可选值

()内为默认

hibernate.dialect

允许 Hibernate 针对特定的关系数据库生成优化的 SQL 的 org.hibernate.dialect.Dialect 的类名。

例如:org.hibernate.dialect.MySQLDialect

hibernate.show_sql

输出所有 SQL 语句到控制台。

true|false

(false)

hibernate.format_sql

在 log 和 console 中打印出更漂亮的 SQL。

true|false

(false)

hibernate.default_catalog

在生成的 SQL 中,将给定的 catalog 附加于非全限定名的表名上

hibernate.session_factory_name

org.hibernate.SessionFactory 创建后,将自动使用这个名字绑定到 JNDI 中。

hibernate.max_fetch_depth

为单向关联(一对一,多对一)的外连接抓取(outer join fetch)树设置最大深度。

0到3

hibernate.default_batch_fetch_size

为 Hibernate 关联的批量抓取设置默认数量。

4、8、16

hibernate.default_entity_mode

为由这个 SessionFactory 打开的所有 Session指定默认的实体表现模式。

dynamic-map,dom4j,pojo

hibernate.order_updates

强制 Hibernate 按照被更新数据的主键,为SQL 更新排序。这么做将减少在高并发系统中事务的死锁。

true|false

hibernate.generate_statistics

如果开启,Hibernate 将收集有助于性能调节的统计数据。

true|false

hibernate.use_identifier_rollback

如果开启,在对象被删除时生成的标识属性将被重设为默认值。

true|false

hibernate.use_sql_comments

如果开启,Hibernate 将在 SQL 中生成有助于调试的注释信息,默认值为 false。

true|false

(false)

Hibernate JDBC 和连接(connection)属性、Hibernate 缓存属性、Hibernate 事务属性等主要用于提升性能,并且Hibernate有适当的默认值。入门者可以忽略这些设置,等学到一定阶段,你可以参考官方文档进行适当配置。

Hibernate配置文件详解的更多相关文章

  1. 2018.10.6 Hibernate配置文件详解-------ORM元数据配置 &&& hibernate主配置文件

    ORM既然是实体与关系数据库的映射,那就需要建立实体和关系数据库之间的基础数据,也可以称为元数据.简单的说就是表示类与表.列与属性(get.set方法)等等之间对应关系的数据. Customer.hb ...

  2. Hibernate入门核心配置文件和orm元数据配置文件详解

    框架是什么? 框架是用来提高开发效率的 封装了一些功能,我们需要使用这些功能时,调用即可,不用手动实现 所以框架可以理解为一个半成品的项目,只要懂得如何使用这些功能即可 Hibernate是完全面向对 ...

  3. 【Hibernate】Hibernate系列3之配置文件详解

    配置文件详解 3.1.配置文件 连接池性能优化:http://www.cnblogs.com/xdp-gacl/p/4002804.html

  4. spring配置文件详解--真的蛮详细

    spring配置文件详解--真的蛮详细   转自: http://book.51cto.com/art/201004/193743.htm 此处详细的为我们讲解了spring2.5的实现原理,感觉非常 ...

  5. Java程序员从笨鸟到菜鸟之(五十一)细谈Hibernate(二)开发第一个hibernate基本详解

    在上篇博客中,我们介绍了<hibernate基本概念和体系结构>,也对hibernate框架有了一个初步的了解,本文我将向大家简单介绍Hibernate的核心API调用库,并讲解一下它的基 ...

  6. 【JAVAEE学习笔记】hibernate01:简介、搭建、配置文件详解、API详解和CRM练习:保存客户

    今日学习:hibernate是什么 一.hibernate是什么 框架是什么: 1.框架是用来提高开发效率的 2.封装了好了一些功能.我们需要使用这些功能时,调用即可.不需要再手动实现. 3.所以框架 ...

  7. J2EE进阶(四)Spring配置文件详解

    J2EE进阶(四)Spring配置文件详解 前言 Spring配置文件是用于指导Spring工厂进行Bean生产.依赖关系注入(装配)及Bean实例分发的"图纸".Java EE程 ...

  8. spring4配置文件详解

    转自: spring4配置文件详解 一.配置数据源 基本的加载properties配置文件 <context:property-placeholder location="classp ...

  9. JAVAEE学习——hibernate01:简介、搭建、配置文件详解、API详解和CRM练习:保存客户

    今日学习:hibernate是什么 一.hibernate是什么 框架是什么: 1.框架是用来提高开发效率的 2.封装了好了一些功能.我们需要使用这些功能时,调用即可.不需要再手动实现. 3.所以框架 ...

随机推荐

  1. angularjs应用骨架(4)

    继续上一篇 继续了解angular其他内容. 与服务器交互 真正的应用需要和真实的服务器进行交互移动应用和新兴的Chrome桌面应用可能是例外.但是对于此外的所有应用来说,无论是想把数据持久化到云端还 ...

  2. mount的艺术

    在阅读本文之前,我假设你已经对Linux系统下的硬盘.光盘的设备命令规则有所了解,比如sda和sda1的关系,以及hda.sda.fd.cdrom等设备. === 1 我把U盘插到USB口上了,下一步 ...

  3. phpexcel的写出操作(生成excel表)

    /* thinkphp3.2 ThinkPHP/Library/Org/Util/ 放置位置 http://files.cnblogs.com/files/youligai/phpexcel.zip  ...

  4. Dictionary通过Value找到它的key

    private void GetDicKeyByValue() { Dictionary<string, string> dic = new Dictionary<string, s ...

  5. 将小度WiFi改造为无线网卡(小度WiFi能够接收WiFi信号)

    安装官方的小度WiFi的驱动器,只能让它当做无线信号的发射装置,但是我想通过小度WiFi让我的台式电脑能都接收无线信号,于是经过一番折腾终于成功了.我的是win7. 小度WiFi无法接受无线信号,不能 ...

  6. HTML5峰会小记

    5259月228日,在大连理工的伯川图书馆举办了一次HTML5峰会,小记一下这次峰会的内容. 名为HTML5峰会,其本质就是一次各大赞助商的轮番登场,产品介绍间隙插播一下HTML5.但是并不影响这次峰 ...

  7. Contest 20140708 testA && testC

    testA 输入文件: testA.in  输出文件testA.out 时限2000ms 问题描述: 如果一个数化为一个二进制数之后(没有前导0),0的个数>=1的个数.那么这个数就是方数. E ...

  8. Hdu5517 Triple

    Description Given the finite multi-set \(A\) of \(n\) pairs of integers, an another finite multi-set ...

  9. Map迭代器

            今天用到了,发现不会,随手谷歌之,整理如下. //Map是接口,刚才在那new Map,汗颜 Map<Character,Integer> mm = new HashMap ...

  10. struts2-core-2.1.6.jar!/struts-default.xml无法加载的问题

    找到合适且匹配的jar包,更改完jar包后要去.metadata---.me_tcat---webapps---项目名----WEB-INF--lib下将多余的jar包去掉,否则还运行时还存在替换掉的 ...