Hibernate(三)结构-配置文件-实体映射及配置文件

一、体系结构

  • SessionFactory:属于单一数据库的编译过的映射文件的一个线程安全的,不可变的缓存快照。Session的工厂。有可能持有一个可选的数据缓存可以进程级别或者群级别保存可以在事务中重用数据。
  • 会话,Session:单线程,生命期短促的对象,代表应用程序和持久化层之间的一次对话。封装了一个JDDBC连接,它也是Transaction的工厂,保存有必须持久化对象的缓存,用于遍历对象,或者通过标识符查找对象。
  • 持久化对象(Persistent Object)及其集合(Collection):生命期短促的单线程对象,包含了持久化状态和商业功能。变通的JavaBeans/POJOs. (Plain Old Java Objects, 简单洁净Java对象)有时候也称作Plain Ordinary Java Objects,表示一个数据集合。唯一特别的是他们现在从属于一个Session,一旦Session被关闭,它们都将从Session中取消联系,可以在任何程序层自由使用如:直接作为传送到表现层的DTO(即数据传输对象),数据传输对象。
  • 临时对象(Transient Object)及其集合(Collection):目前没有从属于一个Session的持久化类的实例。可能是刚刚被程序实例化,还没有来得及被持久化,或者是被一个已经关闭的Session所实例化,临时对象。
  • 事务,Transaction:(可选)单线程生命期短促的对象,应用程序用它来表示一批工作的原子操作。是底层的JDBC,JTA或者CORBA事务的抽象。JTA,即Java Transaction API,JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序的JTA支持极大地增强了数据访问能力.CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构,通用对象请求代理体系结构).一个Seesion在某些情况下可能跨越多个Transaction事务
  • ConnectionProvider:(可选)JDBC连接的工厂和池。从底层的DateSource或者DriverManager抽象而来。对应程序不可见,但可以被开发都扩展和实现。
  • TransactionFactory:(可选)事务的实例工厂。对应用程序不可见,同样可以被开发都扩展和实现。

二、配置文件---XML格式

配置文件默认为:hibernate.cfg.xml

Hibernater初始化期间会自动在CLASSPATH中寻找这个文件,并读取其中的配置信息,为后期数据库操作做好准备。

配置文件应部署在CLASSPATH中,对于Web应用而言,配置文件应放置在\WEB-INF\classes,目录下

配置文件内容:

<?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">

<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>

    <session-factory>
        <!--方言 -->
        <property name="dialect">
            org.hibernate.dialect.Oracle9Dialect
        </property>
        <!--数据库URL -->
        <property name="connection.url">
            jdbc:oracle:thin:@localhost:1521:orcl
        </property>
        <!--数据库访问的用户名 -->
        <property name="connection.username">accp</property>
        <!--数据库访问的用户名的密码 -->
        <property name="connection.password">accp</property>
        <!--数据库驱动这里是oracle数据库的 -->
        <property name="connection.driver_class">
            oracle.jdbc.OracleDriver
        </property>
        <property name="myeclipse.connection.profile">oracle</property>
        <!--是否显示执行的SQL语句 -->
        <property name="show_sql">true</property>
        <!--是否使用数据库外连接 -->
        <property name="hibernate.use_outer_join">true</property>
        <!--事务管理类型 -->
        <property name="hibernate.transaction.factory_class">
            net.sf.hibernate.transaction.JDBCTransactionFactory
        </property>
        <!--映射文件配置 -->
        <mapping resource="com/pb/entity/Login.hbm.xml" />

    </session-factory>

</hibernate-configuration>

三、实体映射

在Hibernate中的对象关系映射就是把实体类与数据库中的表相对应,实现实体类中的属性与数据库表中的字段一一对应

映射是按照持久化类(实体类)的定义一创建的,而非表的定义。

配置文件可以手动写,也可以使用工具生成 如:MyEclipse生成实体类时,可以自动生成配置文件

配置文件名字:类名.hbm.xml

<?xml version=‘1.0‘ encoding=‘utf-8‘?>
 <!-- 这里与hibernate.cfg.xml配置文件不一样注意 -->
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- 这里与hibernate.cfg.xml配置文件不一样注意 -->

<hibernate-mapping>
 <!--类名和数据库中的表名相对应 哪个用户 -->
    <class name="com.pb.entity.Login" table="LOGIN" schema="accp">
      <!-- id代表主键  column列表 type代表数据类型-->
        <!-- 类中的属性 -->
        <id name="username" type="java.lang.String">
         <!-- 表中哪一个字段或者是列名 -->
            <column name="USERNAME" length="20" />
            <!--生成的方式  assigned代表由外部外部程序负责生成,在 save() 之前必须指定一个-->
        <!--  native由hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式,灵活性很强。如果能支持identity则使用identity,如果支持sequence则使用sequence。-->
            <generator class="assigned" />
        </id>
        <!-- 密码段设置 -->
        <!--类中的名字和数据类型  -->
        <property name="password" type="java.lang.String">
        <!-- 表中的字段名,长度可心不要,是不为空true为不能为空,false是可以为空 -->
            <column name="PASSWORD" length="20" not-null="true"/>
        </property>
        <!--如果还有其它的属性,设置方式与password一样设置  -->
    </class>
</hibernate-mapping>

四、Hibernate 可选配置

4.1、Hibernate 配置项

(1)hibernate.dialect 指定方言后,Hibernate 可以根据低层数据库自动产生优化过的SQL。取值为org.hibenate.dialect.Dialect 的继承类。多数情况下,Hibernate

可以根据低层JDBC 返回的metadata 来判断。

(2)hibernate.show_sql 打印所有的SQL 语句到控制台,可以通过设置org.hibernate.SQL 类的日志策略到DEBUG 级,实现同样的效果。取值true|false。

(3)hibernate.format_sql 格式化SQL 语句在打印到控制台或写入日志文件时。取值true|false。

(4)hibernate.default_schema 在产生SQL 语句时,在表名前加上映射文件给出的表空间(tablespace)或数据库模式(schema)。取值SCHEMA_NAME。

(5)hibernate.default_catalog 在产生SQL 语句时,在表名前加上映射文件给出的catalog。取值CATALOG_NAME。

(6)hibernate.session_factory_name Hibernate 创建org.hibernate.SessionFactory实例后后会自动的将这个绑定到JNDI 中的名字上。取值jndi/sf。

(7)hibernate.max_fetch_depth 设置对单个表的外连接数最大深度。0是屏蔽默认的外连接设置。推荐设置为0到3之间。

(8)hibernate.default_batch_fetch_size 设置Hibernate 批量联合查询的尺度。强烈建议。推荐设置为4、8、16。

(9)hibernate.default_entity_mode 默认的实体表现模式,通过SessionFactory打开的所有的Session。取值,dynamic-map、dom4j、pojo。

(10)hibernate.order_updates 强迫Hibernate 通过被更新项的主键值排序SQL更新。这样可以在高并发时,减少事务死锁。取值true|false。

(11)hibernate.generate_statistics 如果设置为true,Hibernate 将为性能调整,收集统计信息。取值true|false。

(12)hibernate.use_identifier_rollback 如果设置为true,产生的标识属性将被重置成默认值,当对象被删除后。取值为true|false。

(13)hibernate.use_sql_comments 如果设置为true,Hiberante 将为SQL 产生注释,这样更利于调试。默认值为 false。取值为true|false。

4.2、Hibernate JDBC 和连接的属性

( 1 ) hibernate.jdbc.fetch_size 指定JDBC 的查询尺度。通过调用(Statement.setFetchSize())。
(2)hibernate.jdbc.batch_size 指定Hibernate 如何使用JDBC2批量更新。取值,推荐5到30。
(3)hibernate.jdbc.batch_versioned_data 设置这个属性为true,JDBC 将返回executeBatch 执行后正确的行数。打开这个参数,通常是安全的。Hibernate 将自动
的译码这些数据使用批量DML。默认为false。取值true|false。
(4)hibernate.jdbc.factory_class 选择一个定制的org.hibernate.jdbc.Batcher。所有的应用程序不需要配置这个属性。取值,定义工厂的类名。
(5)hibernate.jdbc.use_scrollable_resultset Hibernate 使用JDBC2的可滚动记录集。当使用用户提供的JDBC 连接时,需要设置这个参数。否则,Hibernate 使用连
接MetaData。取值true|false。
(6)hibernate.jdbc.use_streams_for_binary 当读或写二进制数据或序列化数据从JDBC 或到JDBC,使用流。系统级的数据。设置true|false。
( 7 ) hibernate.jdbc.use_get_generated_keys 在插入后,可以使用JDBC3的PreparedStatement.getGeneratedKeys()中的值找回本地产生的键值。要求JDBC3+和
JRE1.4+,如果使用Hibernate identifier generator 后你的驱动程序有问题,请设置为false。默认情况下,设法连接MetaData 来决定。取值,true|false。
(8)hibernate.connection.provider_class 实现了:org.hibernate.connection.ConnectionProvider 接口的类的名称,为Hibernate 提供连接。
( 9 ) hibernate.connection.isolation 设置JDBC 事务隔离的级别。检查java.sql.Connection 的定义的常量值,但要注意大多数数据库不支持所有的隔离级别、一些附加的和非标准的隔离级别。取值,1、2、4、8。
(10)hibernate.connection.autocommit JDBC 共享连接的自动提交。(不推荐)取值,true|false。
(11)hibernate.connection.release_mode 指定什么时候,Hibernate 应该释放JDBC 连接。默认情况下,JDBC 是一直存在,只到Session 是被明确关闭或断开连
接时。对于应用的服务器JTA 数据源,你应该使用after_statement 强制释放JDBC连接在每个JDBC 请求结束后。对于非JTA 数据源,通常是在每个事务结束后释放
JDBC 连接是有意义的。将该值设为auto 时,JTA 和CMT 事务策略时,是选择after_statement 方式。JDBC 事务策略时,是选择after_transaction。取值,auto(default),
on_close,after_statment,after_transaction。注意:这个设置只影响通过 SessionFactory.openSession 打开的session。对于通
过SessionFactory.getCurrentSession 获取的session,CurrentSessionContext 实现类的配置是用来控制这些session 的连接释放模式。
(12)hibernate.connection. 传递这些属性到DriverManager.getConnection 中。
(13)hibernate.jndi. 传递这些属性到JNDI InitialContextFactory。

4.3、Hibernate Cache 属性

(1)hibernate.cache.provider_class 定制的CacheProvider 的类名。
(2)hibernate.cache.use_minimal_puts 花费更多的读操作,来优化二级缓存的最少写操作。这个操作对于集群缓存是非常有用的。在Hibernate3中,对于集群缓
存是默认开启该功能的。取值,true|false。
(3)hibernate.cache.use_query_cache 开启查询缓存,个别查询肯定应该开启查询缓存。取值,true|false。
(4)hibernate.cache.use_second_level_cache 也许过去习惯于完全屏蔽掉二级缓存,默认是开启,对于指定CacheProvider 实现类的情况。取值,true|false。
(5)hibernate.cache.query_cache_factory 实现QueryCache 接口的类名,默认是内置的StandardQueryCache

(6)hibernate.cache.region_prefix 对于使用二级缓存区域名的前缀。
(7)hibernate.cache.use_structured_entries 强迫Hibernate 在存储数据到二级缓存时,使用更人性化的格式。取值,true|false。

4.4、Hibernate 事务属性

( 1 ) hibernate.transaction.transaction_class 使用Hibernate 事务APIs 的TransactionFactory 的类名。默认是JDBCTransactionFactory。

(2)jta.UserTransaction JTATransactionFactory 使用JNDI 名字从应用服务器中获取JTA UserTransaction。取值,jndi/ut。

(3)hibernate.transaction.manager_lookup_class是一个TransactionManagerLookup 实现类的类名。当JVM 级别的缓存开启时或在JTA 环境中使用hilo generator 时,要求指定该值。

(4)hibernate.transaction.flush_before_completion 如果设为true,session 将在事务完成阶段之前,自动将缓存区的值推入到数据库中。内置和自动session 上下文管理是被优先选用的。取值,true|false。

(5)hibernate.transaction.auto_close_session 如果设为true,session 将在事务完成之后,自动的关闭session。内置和自动session 上下文管理是被优先选用的。取

值,true|false。

4.5、Miscellaneous properties 各种混合的属性

(1)hibernate.current_session_context_class 提供一个对于当前session 生命周期的策略。取值,jta、thread、managed、定制类名。

( 2 ) hibernate.query.factory_class 选择HSQL 的解析实现类。取值,org.hibernate.hsql.ast.ASTQueryTranslatorFactory 和

org.hibernate.hsql.classic.ClassicQueryTranslatorFactory。

(3)hibernate.query.subsitutions Hibernate 中标记符到SQL 中标记符的映射。举例说,可以是函数名或普通字符串名。取值,如hsqLiteral=SQL_LITERAL,

hqlFunction=SQLFUN。

(4)hibernate.hbm2ddl.auto 当SessionFactory 被创建时,自动的验证或输出模式DDL(也就建表语句)到数据库中。也就是说,自动的验证数据库表结构或先删

除再重新建立,或在原表结构上更新数据表结构。当将值置为create-drop 时,在SessionFactory 被清除时,将删除数据库中表结构。取值,validate、create、update、

create-drop。

(5)hibernate.cglib.use_reflection_optimizer 用CGLIB 代替运行期的reflection(系统级属性)。在有故障时,反射是非常有用的,注意Hibernate 总是需要CGLIB,

甚至在你关闭优化后。你不可以设置这个属性在hibernate.cfg.xml 文件中。

时间: 2024-10-13 16:16:05

Hibernate(三)结构-配置文件-实体映射及配置文件的相关文章

mybatis的基本配置:实体类、配置文件、映射文件、工具类 、mapper接口

搭建项目 一:lib(关于框架的jar包和数据库驱动的jar包) 1,第一步:先把mybatis的核心类库放进lib里 2,第二步:导入第三方类库(在lib里).mybatis的核心类库在运行时还依赖一些第三方类库 3,第三步:导入连接数据库驱动jar包 二:创建mybatis的配置文件 1,第一步:先创建实体包,对照着表结构把实体类写出来.封装好就是写get,set方法------不像hibernate,可以自动的将表名字段名与实体类相对应,不用自己手写实体类与映射文件 2,第二步:创建xml

Hibernate学习---第三节:映射配置文件详解

1.映射文件,代码如下: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- 持久化映射文件(将java对象映射到数据库表) default-

Hibernate配置文件和映射元素解释

象关系的映射是用一个XML文档来说明的.映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等.下面从一个映射的例子开始讲解映射元素. AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载! <!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml version='1.0' encoding='gb2312'?> <!--表明解析本XM

蜗牛—Hibernate反向生成实体类及配置文件

今天学习了Hibernate的一些知识 第一步,打开myeclipse中的database视图,找到相应的表,选中后右键单击, 接下来, 蜗牛-Hibernate反向生成实体类及配置文件

Hibernate配置文件与映射文件详解

Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=POJO+映射文件 根据体系结构视图可以了解到整个利用Hibernate框架实现的项目包括整个重要的配置文件: Hibernate配置文件:实现Hibernate基础配置,是Hibernate能够友好的与DB进行交互基础: 开发时放置src目录下,取名为:hibernate.cfg.xml(hiber

MyEclipse自动生成hibernate实体类和配置文件攻略

步骤1:找到导航栏里面的window--showView然后输入db brower,打开数据库浏览窗口步骤2:在数据库浏览窗口里只有一个Myeclipse自带的数据库,该数据没有用,我们在空白的地方右键新建一个数据库填写数据库信息,包括连接方式,用户名,密码,和jdbc的配置一样,注意将oracle的jar包导进来 步骤3:数据库连接已经出现,我们可以连接上数据库了 步骤4:这时候我们回过头,新建一个java或javaEE项目,名字随便取,然后右键该项目,选择Myeclipse---add hi

Hibernate映射之实体映射&lt;转载&gt;

实体类与数据库之间存在某种映射关系,Hibernate依据这种映射关系完成数据的存取,因此映射关系的配置在Hibernate中是最关键的.Hibernate支持xml配置文件与@注解配置两种方式.xml配置文件是最基础的配置,而@注解是Java的官方JPA(Java Persistence API)提供的.本章分别使用@注解与xml讲解Hibernate的映射配置. 10.1  实体类的映射 从Java的角度讲,实体类就是普通的Java封装类(有人称为POJO有人称为VO).仅从实体类中的代码信

Hibernate映射之实体映射

1.使用@注解配置实体类 实体类一般有ID.普通属性.集合属性等,分别对应数据库的主键.普通列.外键.@注解配置中,实体类用@Entity注解,用@Table指定对应的数据表,用@Id配置主键,用@Column配置普通属性,用@OneToMany.@ManyToOne.@OneToOne.@ManyToMany配置实体间关系等.实体类之间的关于在后面的章节中会做详细介绍.下面编写一个UsersVo类,在该类中使用@注解配置实体类的映射,UsersVo类的代码如下: package com.cn.

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

框架是什么? 框架是用来提高开发效率的 封装了一些功能,我们需要使用这些功能时,调用即可,不用手动实现 所以框架可以理解为一个半成品的项目,只要懂得如何使用这些功能即可 Hibernate是完全面向对象的顶级框架 Hibernate框架的搭建 导包 书写配置文件 upgrade:升级改善 Hibernate配置文件详解 orm元数据配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hiber