Hibernate从认识到如何应用

一、认识Hibernate

Hibernate的五个核心接口:

1.       Configuration接口:配置并启动hibernate,创建SessionFactory对象

2.       SessionFactory接口:初始化hibernate,充当数据存储源的代理,创建Session对象

特点:

(1)       它是线程安全的,即它的一个实例可以被应用的多个线程共享

(2)       它是重量级的,即它的实例不能随意的创建和销毁,如只访问一个数据库,只需要创建一个SessionFactory实例,在初始化应用的时候创建该实例,如果应用同时访问多个数据库,就需要给每个数据库单独创建一个SessionFactory实例

(3)       用户可以给SessionFactory配置一个缓存插件,这个缓存插件被称为hibernate的二级缓存,存放工作单元访问过的数据用于其他工作单元的访问,即二级缓存的数据所有的工作单元可共享一个工作单元通常对应一个数据库事务

3.       Session接口:负责保存、更新、删除、加载以及查询对象

特点:

(1)       不是线程安全的,所以在设计时要注意避免多个线程共享同一个Session

(2)       它是轻量级的,及创建和销毁实例时占用资源少,所以在应用可以经常的创建和销毁Session实例,如给每个用户请求创建一个Session、或者每个工作单元创建一个Session

(3)       Session有一个缓存,及hibernate的一级缓存,存放当前工作单元访问的数据,每个Session实例都有自己的缓存,而只有当前工作单元能访问一级缓存中的数据

(4)       Session接口的find()方法具有查询功能,但只能执行一些简单的HQL查询语句的快捷方法

4.       Transaction:管理事务,对底层的事务接口(JTAJDBC APICORBA API)做了封装

5.       QueryCriteria接口:负责执行数据库查询以及控制查询的过程

(1)       Query:它包装了一种HQLHibernate Query Language)查询语句,HQL查询语句和SQL查询语句相似,但是HQL语句是面向对象的,它引用的是类名以及类的属性名而不是引用表名和字段名

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

Hibernate的其他接口:

1.       回调接口:当对象发生特定的事件(加载、保存、更新、删除等),Hibernate通过回调接口来响应事件,回调接口分为两类:

(1)       LifeCycleValidatable接口,需要由持久化类来实现接口,LifeCycle使持久化类能响应删除、保存加载的事件,Validatable使持久化类能在保存之前进行数据验证;这种方式使得Hibernate API渗透到持久化类中,不利于移植,尽量少用

(2)       Intercepter接口,程序可以定义专门的类来实现Intercepter接口

2.       映射类型接口:

Type接口表示Hibernate的映射类型,用于把域对象映射为数据库的关系数据,HibernateType接口提供了各种实现,应用程序不必自己创建Type实例,应该通过Hibernate类访问它的静态Type实例,如:Hibernate.STRING访问StringType实例,在通过Query动态绑定查询参数时,可以用这种方式设定被绑定参数的映射类型:

Query query = Session.createQuery(“from User u where c.name = :name”);

//name参数设定值为:”TOM”,并且指定name的类型为Hibernate.STRING类型

query.setParameter(“name”,”TOM”,Hibernate.STRING);

Hibernate还允许用户通过实现UserTypeCompositeUserType接口自定义映射类型

3.       可扩展的接口:

Hibernate内置的策略不能满足用户需求时,Hibernate允许用户以实现接口或扩展特定类的方式自定义策略,Hibernate扩展接口如下:

(1)       定制主键生成策略:IdentifierGenerator接口

(2)       定制本地SQL方言:Dialect接口

(3)       定制缓存机制:CacheCacheProvider接口

(4)       定制JDBC连接管理:ConnectionProvider接口

(5)       定制事务管理:TransactionFactoryTransactionTransactionManagerLookup接口

(6)       定制ORM策略:ClassPersister接口及它的子接口

(7)       定制属性访问策略:PropertyAccessor接口

(8)       创建代理:ProxyFactory接口

(9)       定制映射类型:UserTypeCompositeUserType接口

以上的接口(除了UserTypeCompositeUserType外)都由Hibernate提供了至少一种实现,一般就使用Hibernate的内置实现,在不满足需求的时根据内置实现代码自己实现

 

二、入门Hibernate

1. Hibernate没有规定持久化类必须实现java.io.Serializable接口,但是在采用分布式接口的JAVA应用中,当Java对象在不同的进程节点之间传输时;或者在JAVA Web应用中,希望对HttpSerssion中的对象进行持久化时;这两种情况的Java对象必须实现接口

2. 持久化类有一个ID属性,用来唯一表示每个持久化类的对象,在面向对象术语中,这个ID被称为对象标识符OIDObject Identifier),通常用整数表示(也可其他数据类型);当A.getId().equals(B.getId())结果为true时:说明AB为同一个对象,并且表示数据库同一条记录

3. Hibernate要求持久化类必须有一个不带参数的默认构造方法,在程序运行时,Hibernate通过Java反射机制调用java.lang.reflect.Constructor.newInstance()方法来构造持久化类的实例,如果这个持久化类使用了延迟加载策略,为了使Hibernate在运行时能为持久化类创建动态代理,持久化类的默认构造方法的访问修饰符必须时public或者protected,不能是默认的或者private

4. hbm2javahbm2ddl工具

1)转换工具有:

       hbm2java:根据映射文件自动生成java源文件,此工具位于Hibernate扩展包中,需要到www.hibernate.org网站上下载Hibernate的扩展包,文件形式:hibernate-extensions-2.x.y.zip,解压后复制hibernate-tools.jar文件以及lib子目录下所有的jar文件到项目中

       hbm2ddl:根据映射文件自动生成数据库Schema

       XDoclet:根据带有XDoclet标记的Java源文件生成映射文件

       Middlegen:根据数据库Schema自动生成映射文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值