Hibernate中的配置对象

  • 数据库连接:由 Hibernate 支持的一个或多个配置文件处理。这些文件是 hibernate.properties 和 hibernate.cfg.xml
  • 类映射设置:这个组件创造了 Java 类和数据库表格之间的联系

SessionFactory 对象

SessionFactory 是一个线程安全对象并由应用程序所有的线程所使用

Session 对象

一个会话被用于与数据库的物理连接。Session 对象是轻量级的,并被设计为每次实例化都需要与数据库的交互。持久对象通过 Session 对象保存和检索。

Session 对象不应该长时间保持开启状态因为它们通常情况下并非线程安全,并且它们应该按照所需创造和销毁。

Transaction 对象

一个事务代表了与数据库工作的一个单元并且大部分 RDBMS 支持事务功能。在 Hibernate 中事务由底层事务管理器和事务(来自 JDBC 或者 JTA)处理。

Query 对象

Query 对象使用 SQL 或者 Hibernate 查询语言(HQL)字符串在数据库中来检索数据并创造对象。一个查询的实例被用于连结查询参数,限制由查询返回的结果数量,并最终执行查询。

Criteria 对象

Criteria 对象被用于创造和执行面向规则查询的对象来检索对象。


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

hibernate.properties

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

一个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)树设置最大深度。

03

hibernate.default_batch_fetch_size

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

4816

hibernate.default_entity_mode

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

dynamic-mapdom4jpojo

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有适当的默认值。入门者可以忽略这些设置,等学到一定阶段,你可以参考官方文档进行适当配置。

原文地址:https://www.cnblogs.com/tanlei-sxs/p/9681045.html