分享

Hibernate介绍与配置文件、jar包的说明(二)

 江江385 2013-05-29

实体类映射文件(<mappingresource="cn/zc/domain/User.hbm.xml"/>):

User.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

         "-//Hibernate/HibernateMapping DTD 3.0//EN"

         "http://www./dtd/hibernate-mapping-3.0.dtd">

 

<hibernate-mappingpackage="cn.zc.domain">

 

         <classname="User" table="user">

                   <idname="id" column="id">

                            <generatorclass="native"/>

                   </id>

                   <propertyname="name"/>

                   <propertyname="sex"/>

                   <propertyname="number"/>

                   <propertyname="birthday"/>

         </class>

 

</hibernate-mapping>

 

 

常用配置信息:

<hibernate-mapping package="cn.zc.domain">    package指定实体所在路径

<class name="User"table="user">             name指定实体名字,table指定数据库中映射的表

<id name="id"column="id">                   id元素:指定每个持久化类的唯一标识到数据库表主键字段的映射、name属性:指定持久化类的OID名、column属性:指定数据库表主键字段名(可省略)、type属性:指定主键映射时所使用的Hibernate类型名(可省略)

<propertyname="name"/>                      name属性:指定持久化类的属性名、column属性:指定数据库表主键字段名(可省略)、type属性:指定主键映射时所使用的Hibernate类型名(可省略)、not-null属性:指定此属性映射到数据库表的字段值是否允许为空值。

 

<generatorclass="native"/>                  generator元素:指定对象标识符的生成器名。

 

Hibernate主键生成策略的常用配置属性即generator  class属性的取值

 属性名称

 说明

 incrment

 用于为long、short或int类型生成唯一标识,在集那群下不要使用该属性

 identity

 由底层数据库生成主键,前提是底层 数据库支持自增字段类型

 sequence

 根据底层数据库的序列生成主键,前提是底层数据库支持序列

 hilo

 根据高/低算法生成,把特定表的字段作为高位值来源,在默认的情况下选用hibernate_unique_key表的next_hi字段

 native

 根据底层数据库对自动生成标识符的支持能力选择identity、sequence或hilo

 assigned

 由程序负责主键的生成,此时持久化类的唯一标识不能声明为private类型

 select

 通过数据库触发器生成主键

 foreign

 使用别一个相关联的对象的标识符,通常和<one-to-one>一起使用


<property>元素的常用配置属性

 属性名称

 说明

 incrment

 用于为long、short或int类型生成唯一标识,在集那群下不要使用该属性

 identity

 由底层数据库生成主键,前提是底层 数据库支持自增字段类型

 sequence

 根据底层数据库的序列生成主键,前提是底层数据库支持序列

 hilo

 根据高/低算法生成,把特定表的字段作为高位值来源,在默认的情况下选用hibernate_unique_key表的next_hi字段

 native

 根据底层数据库对自动生成标识符的支持能力选择identity、sequence或hilo

 assigned

 由程序负责主键的生成,此时持久化类的唯一标识不能声明为private类型

 select

 通过数据库触发器生成主键

 foreign

 使用别一个相关联的对象的标识符,通常和<one-to-one>一起使用


Hibernate应用的主要接口和类:

Configuration类            

负责管理 Hibernate 的配置信息,加载hibernate.cfg.xml配置文件

SessionFactory接口         

一个SessionFactory实例对应一个数据存储源。应用程序从SessionFactory中获取Session实例。

保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存)

 

Session接口                

是 Hibernate 运作的中心,所有持久化对象必须在 session 的管理下才可以进行持久化操作。

 

常用方法:

         save()//把Java对象保存数据库中

persist()//把Java对象保存数据库中与save方法的区别在没有开启事务的时候,persist插入的语句没有做,而save插入的操作确做了,可是回滚了,

没开启事务的时候persist方法不会生成sql语句,而save方法会生成sql语句并且执行了,只是事务没开启,又回滚了。

         update()//更新数据库中的Java对象

         delete()//把Java对象从数据库中删除

         get()//查询实体对象,不存在时候返回null

         load()//从数据库中加载Java对象

         merge()//将给定的对象的状态复制到具有相同标识的持久化对象上。

         find()//从数据库中查询Java对象

saveOrUpdate()//接收一个实体对象,根据实体对象的id判断是否已经存在进行保存或更新操作,这样保存和更新方法就统一了;

 

 

Transaction接口            

代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行。

 

常用方法:

         commit()//提交相关联的session实例

         rollback()//撤销事务操作

         wasCommitted()//检查事务是否提交

 

 

Query和Criteria接口        

都是查询接口,Query实例包装了HQL查询语句,hql是面向对象的,它引用类名及类的属性名,而不是表名和字段名。

Criteria接口完全封装了基于字符串形式的查询语句,比Query接口更面向对象,它擅长执行动态查询。


Hibernate中对象的三种状态:

<1>瞬时态 (Transient)

<2>持久态(Persistent)

<3>脱管态(Detached)

 

1、 瞬时态:

由new命令开辟内存空间的java对象. 如果没有变量对该对象进行引用,它将被java虚拟机回收。

瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,

可通过session的save()或 saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,

此时该瞬时对象转变成持久化对象。

2、 持久态:

处于该状态的对象在数据库中具有对应的记录。当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,

此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下。

  持久对象具有如下特点:

 (1)和session实例关联;

     (2)在数据库中有与之关联的记录。

3、脱管态:

当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象。当脱管对象被重新关联到session上时,并再次转变成持久对象。

         脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转

变成持久对象。

          脱管对象具有如下特点:

(1)       本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收;

(2)       比瞬时对象多了一个数据库记录标识值


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多