Hibernate 构建基础代码

 
Hibernate基础代码包括:


1. POJO
“Plain Ordinary Java Object”,字面上来讲就是无格式普通Java 对象,简
单的可以理解为一个不包含逻辑代码的值对象(Value Object 简称VO)。
2. Hibernate 映射文件:“.hbm.xml”作为后缀
Hibernate 从本质上来讲是一种“对象-关系型数据映射”(Object Relational
Mapping 简称ORM)。前面的POJO在这里体现的就是ORM中Object层的语义,
而映射(Mapping)文件则是将对象(Object)与关系型数据(Relational)相关联的纽带,在Hibernate中,映射文件通常以“.hbm.xml”作为后缀。
3.Hibernate 配置文件:见下。

 


Hibernate 配置文件:
前面已经得到了映射文件和POJO,为了使Hibernate 能真正运作起来,我们还需要一个配置文件。
Hibernate同时支持xml格式的配置文件,以及传统的properties 文件配置方式,不过这里建议采用xml 型配置文件。xml配置文件提供了更易读的结构和更强的配置能力,可以直接对映射文件加以配置,而在properties 文件中则无法配置,必须通过代码中的Hard Coding加载相应的映射文件。下面如果不作特别说明,都指的是基于xml格式文件的配置方式。
配置文件名默认为“hibernate.cfg.xml”(或者hibernate.properties),Hibernate 初始化期间会自动在CLASSPATH 中寻找这个文件,并读取其中的配置信息,为后期数据库操作做好准备。
配置文件应部署在CLASSPATH 中,对于Web 应用而言,配置文件应放置在\WEB-INF\classes 目录下。

 Hibernate <wbr>构建基础代码

 

构建Hibernate基础代码通常有以下途径:
1.手工编写
2.ORM文件和POJO:(通过Hibernate官方提供的MiddleGen for Hibernate 和Hibernate_Extension工具)直接从数据库中导出表结构,并生成对应的ORM文件和Java 代码(POJO)。这是实际开发中最常用的方式,也是这里所推荐的方式。从最大程度上保证了ORM文件和Java 代码与实际数据库结构相一致。

POJO的生成工作可以通过Hibernate Extension 来完成,Hibernate Extension 的tools\bin目录下包含三个工具:另见


3. 映射文件:根据现有的Java代码生成对应的映射文件,将Java 代码与数据库表相绑定。通过预先编写好的POJO 生成映射文件,这种方式在实际开发中也经常使用,特别是结合了xdoclet 之后显得尤为灵活,其潜在问题就是与实际数据库结构之间可能出现的同步上的障碍,由于需要手工调整代码,往往调整的过程中由于手工操作的疏漏,导致最后生成的配置文件错误,这点需要在开发中特别注意。结合xdoclet,由POJO 生成映射文件的技术我们将在“高级特性”章节中进行探讨。

Hibernate高级特性
XDoclet 与Hibernate 映射在POJO 中融合XDoclet 的映射文件自动生成机制,提供了除手动编码和由数据库导出基础代码的第三种选择。
实际开发中,往往首先使用MiddleGen 和hbm2java 工具生成带有XDoclet tag的POJO(MiddleGen build.xml中的genXDocletTags选项决定了是否在映射文件中生成XDoclet Tag,
详见Hibernate Quick Start章节中关于MiddleGen的说明)。之后通过修改POJO中的XDoclettag进行映射关系调整。

 

XDoclet已经广泛运用在EJB开发中,在其最新版本里,包含了一个为Hibernate提供支持的子类库Hibernate Doclet,其中包含了生成Hibernate映射文件所需的ant构建支持以及java doc tag支持。
XDoclet实现基本原理是,通过在Java代码加入特定的JavaDoc tag,从而为其添加特定的附加语义,之后通过XDoclet工具对代码中JavaDoc Tag进行分析,自动生成与代码对应的配置文件,XDoclet。
在Hibernate-Doclet中,通过引入Hibernate相关的JavaDoc tag,我们就可以由代码生成对应的Hibernate映射文件。

 

熟记Hibernate-Doclet 众多的Tag,显然不是件轻松的事情,好在目前的主流IDE 都提供了Live Template支持。我们只需进行一些配置工作,就可以实现Hibernate-Doclet Tag的自动补全功能,

 

编程中的基础语义:
1. Configuration
2. SessionFactory
3. Session
下面我们就这几个关键概念进行探讨。

Configuration
正如其名,Configuration 类负责管理Hibernate 的配置信息。Hibernate 运行时需要获取一些底层实现的基本信息,其中几个关键属性包括:

 

使用Hibernate 必须首先提供这些基础信息以完成初始化工作,为后继操作做好准
备。这些属性在hibernate配置文件(hibernate.cfg.xml 或hibernate.properties)中加以设定(参见前面“Hibernate配置”中的示例配置文件内容)。
当我们调用:
Configuration config = new Configuration().configure();
时,Hibernate会自动在当前的CLASSPATH 中搜寻hibernate.cfg.xml 文件并将其读
取到内存中作为后继操作的基础配置。Configuration 类一般只有在获取SessionFactory时需要涉及,当获取SessionFactory 之后,由于配置信息已经由Hibernate 维护并绑定在返回的SessionFactory之上,因此一般情况下无需再对其进行操作。
我们也可以指定配置文件名,如果不希望使用默认的hibernate.cfg.xml 文件作为配置文件的话:
File file = new File("c:\\sample\\myhibernate.xml");
Configuration config = new Configuration().configure(file);


SessionFactory
SessionFactory 负责创建Session 实例。

我们可以通过Configuation 实例构建SessionFactory:
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();


Configuration实例config会根据当前的配置信息,构造SessionFactory实例并返回。
SessionFactory 一旦构造完毕,即被赋予特定的配置信息。也就是说,之后config 的任何变更将不会影响到已经创建的SessionFactory 实例(sessionFactory)。如果需要使用基于改动后的config 实例的SessionFactory,需要从config 重新构建一个SessionFactory实例。


Session
Session是持久层操作的基础,相当于JDBC中的Connection。
Session实例通过SessionFactory实例构建:

 

Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();

 

Transaction tx = session.beginTransaction();

for (int i = 0; i < 10; i++) {
    Customer customer = new Customer();
    customer.setUsername("customer" + i);
    customer.setPassword("customer");
    session.save(customer);
}

tx.commit();
session.close();

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值