• 数据库连接:由 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)树设置最大深度。

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中的java对象有几种状态,其相互关系如何(区别和相互转换)。

    hibernate中的java对象有几种状态,其相互关系如何(区别和相互转换). 解答:在Hibernate中,对象有三种状态:临时状态.持久状态和游离状态. 临时状态:当new一个实体对象后,这个对 ...

  2. SpringBoot中yaml配置对象

    转载请在页首注明作者与出处 一:前言 YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所 ...

  3. Hibernate中的Session对象 标签: hibernatesession 2017-01-22 22:10 238人阅读 评论(

    Hibernate中的Session 大家在看hibernate视频的时候一定都发现了,每次要操作数据库,总是要新建一个session对象,Hibernate在对资料库进行操作之前,必须先取得Sess ...

  4. Hibernate中的Query对象查询所有记录

    映射文件,核心文件,实体类,工具类的内容都不变直接看测试方法中的代码: package com.yinfu.test; import java.util.List; import org.hibern ...

  5. Hibernate中的session对象update方法的使用

    使一个游离对象转变为持久化对象.例如以下代码在session1中保存了一个Customer对象,然后在session2中更新这个Customer对象: Customer customer = new ...

  6. hibernate中怎样配置两个联合属性为唯一约束(非联合主键)

    Annotation中配置: @Table元素包括了一个schema和一个catalog属性,如果需要可以指定相应的值. 结合使用@UniqueConstraint注解可以定义表的唯一约束(uniqu ...

  7. 在hibernate中查询单个对象的方法,get()、load()、

    查询单个对象可以直接通过Session对象来做到,其中session这个对象提过了2种获得单个对象的方法,一个是get方法和load方法,我去看这个两个方法的时候发现这两个方法的参数是一样的,使用方式 ...

  8. hibernate中session的获取使用以及其他注意事项

    hibernate中session的获取使用以及其他注意事项 前言:工作时,在同时使用Hibernate的getSession().getHibernateTemplate()获取Session后进行 ...

  9. hibernate一级缓存及对象的状态

    hibernate中实体类对象的状态 在hibernate中实体类对象有三种状态 (1)瞬时态(临时态) 瞬时态:即我们自己创建一个对象,还没有保存到数据库就叫临时态,其实也可以说是对像没有id值,跟 ...

随机推荐

  1. TZOJ 4024 游戏人生之梦幻西游(连续子段和绝对值最小)

    塔神酷爱玩梦幻西游这款游戏,这款游戏以著名的章回小说<西游记>故事为背景,透过Q版的人物,营造出浪漫的网络游戏风格.塔神以追求天下无敌为目标,从一个默默无闻的菜鸟,打拼到了登峰造极的大师, ...

  2. Luogu P2066 机器分配(dp)

    P2066 机器分配 题面 题目背景 无 题目描述 总公司拥有高效设备 \(M\) 台,准备分给下属的 \(N\) 个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这 \(M\ ...

  3. 跟我一起做一个vue的小项目(九)

    接下来我们进行的就是城市列表页面数据额动态渲染. 也是在mock数据,进行动态渲染 //city.json { "ret": true, "data":{ &q ...

  4. c++新特性实验(3)声明与定义:constexpr

    1.作用 constexpr 声明一个函数或变量,它的值可以在编译时出现在常量表达式之中. 2.constexpr 变量要求 其类型必须是 字面类型 (LiteralType) . 它必须被立即初始化 ...

  5. LA4254 Processor

      题意:有n个任务,每个任务有三个参数ri,di和wi,表示必须在时刻[ri,di]之内执行,工作量为wi.处理器执行速度可以变化,当执行速度为s时,工作量为wi.处理器的速度可以变化,当执行速度为 ...

  6. 如何获取Expression Design 4工具与Expression Blend 4工具

    在VS2010+C#+WPF 开发项目过程中涉及到界面的布局与设计,网上有人讲采用Expression Design 4与Expression Blend 4工具相当方便, 于是决定试看看,下面将这个 ...

  7. 利用HttpWebRequest通过POST Json数据在.net后台实现不同平台间的数据传输

    /// <summary> /// 返回JSon数据 /// </summary> /// <param name="JSONData">要处理 ...

  8. Tomcate 启动异常,java.net.BindException: Address already in use: JVM_Bind:80的解决办法

    一直用Tomcat,但是前几天突然报错:           java.net.BindException: Address already in use: JVM_Bind:80 第一反应就是80端 ...

  9. ckfinder提示从服务器读取XML数据出错

    在web.xml中加入以下配置,具体路径根据工程配置写 <!-- ckfinder --> <servlet> <servlet-name>ConnectorSer ...

  10. Python之路,Day4 - Python基础(转载Alex)

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...