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配置文件

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

或者

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

2.为Configuration指定映射文件

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

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

  1. cfg.addClass(test.Order.class);

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

1
2
3
4
5
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

  1. 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例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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>
<br>

hibernate.properties

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

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

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

一个hibernate.properties例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
#数据库使用的驱动类
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类在同一包(目录)中。

1
2
3
4
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. hibernate 联合主键生成机制(组合主键XML配置方式)

    hibernate 联合主键生成机制(组合主键XML配置方式)   如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体 ...

  2. hibernate 一对一 one to one的两种配置方式

    hibernate中one-to-one两种配置方式 标签: hibernateHibernateone-to-one 2013-02-19 17:44 11445人阅读 评论(1) 收藏 举报  分 ...

  3. spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式

    spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式[部分内容转载] 2018年03月27日 18:58:41 守望dfdfdf 阅读数:62更多 个人分类: 工 ...

  4. Hibernate中双向多对多的两种配置方式

    Hibernate中双向多对多的两种配置方式 1.建立多对多双向关联关系 package cn.happy.entitys; import java.util.HashSet; import java ...

  5. c3p0三种配置方式(automaticTestTable)

    c3p0的配置方式分为三种,分别是http://my.oschina.net/lyzg/blog/551331.setters一个个地设置各个配置项2.类路径下提供一个c3p0.properties文 ...

  6. Spring MVC+Spring +Hibernate配置事务,但是事务不起作用

    最近做项目,被一个问题烦恼了很久.使用Spring MVC+Spring +Hibernate开发项目,在使用注解配置事务管理,刚开始发现无论如何数据库都无法更新,但是可以从数据库查询到数据.怀疑是配 ...

  7. Hibernate入门6.Hibernate检索方式

    Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...

  8. Spring+Hibernate配置多数据源

    配置说明 在实际应用中,经常会用到读写分离,这里就这种情况进行Spring+Hibernate的多数据源配置.此处的配置只是让读的方法操作一个数据库,写的方法操作另外一个数据库. 注:我这里的配置JD ...

  9. C3P0连接池配置方式

    c3p0的配置方式分为三种,分别是 1.setters一个个地设置各个配置项 2.类路径下提供一个c3p0.properties文件 3.类路径下提供一个c3p0-config.xml文件 1.set ...

随机推荐

  1. 【转】JVM 架构解读

    每个Java开发人员都知道字节码由JRE(Java运行时环境)执行.但许多人不知道JRE是Java Virtual Machine(JVM)的实现,它分析字节码,解释代码并执行它.作为开发人员,我们应 ...

  2. nodejs---修改文件名字

    D:\node\update_name目录有如下文件: 1:文件夹:icons 2:js文件:update-name.js js文件代码: // 引入fs文件处理模块var fs = require( ...

  3. Java 条形码 二维码 的生成与解析

    Barcode简介 Barcode是由一组按一定编码规则排列的条,空符号,用以表示一定的字符,数字及符号组成的,一种机器可读的数据表示方式. Barcode的形式多种多样,按照它们的外观分类: Lin ...

  4. 卷积神经网络(CNN)学习算法之----基于LeNet网络的中文验证码识别

    由于公司需要进行了中文验证码的图片识别开发,最近一段时间刚忙完上线,好不容易闲下来就继上篇<基于Windows10 x64+visual Studio2013+Python2.7.12环境下的C ...

  5. Java程序设计之链表结构

    唉,说点废话,昨天偶尔看到一年前自己用C解约瑟夫环问题的循环链表,唏嘘不已,想想自己一年前嵌入式的梦呢,这两天发生了许多,而有些人不在了就真的不在了,心情不好,不多说了,直接上代码,只是些链表的基本操 ...

  6. Resources.Load加载文件返回null的原因

    1.文件夹都要放在Resources目录下 2.加载时photoName不需要扩展名 Texture2D t = Resources.Load<Texture2D>("Loadi ...

  7. SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)

    SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...

  8. jpa

    学习尚硅谷jpa笔记: 所依赖的jar包: 首先在META-INF下创建配置文件,persistence.xml <?xml version="1.0" encoding=& ...

  9. linux重启mysql无法启动

    如VPS新建后,重启则无法启动,出现类似 Starting MySQL ... * The server quit without updating PID file (/var/run/mysqld ...

  10. [网站性能3]SqlServer中Profiler的使用

    原文链接:http://www.cnblogs.com/caishuhua226/p/3838060.html   http://www.cnblogs.com/lyhabc/articles/294 ...