五:使用Hibernate完成对象持久化

goodriver 2011-02-18

五:使用Hibernate完成对象持久化

transient瞬时的

persistent持久的

detached分离的

transaction事务

generator发生器

fetch取得

capability能力

目标

5.1为什么需要Hibernate

5.2Hibernate是什么

5.2.1持久化

5.2.2对象—关系映射

5.3使用Hibernate的基本步骤

5.3.1准备工作

5.3.2使用Hibernate实现用户添加

5.4使用Hibernate实现数据库的删改

5.5使用工具简化Hibernate开发

5.6在项目中使用Hibernate

小结:

5.1:为什么需要Hibernate

实现更高效的数据库访问,精简数据访问层代码,缩短项目开发时间。

5.2:Hibernate是什么

是一个优秀的Java持久化层解决方案,是当今主流的对象——关系映射工具。重量级持久化框架。

5.2.1:持久化

瞬时状态(Transient)的数据:在程序运行时,保存在内存当中的程序数据,程序退出,数据消失。

持久状态(Persistent)的数据:当程序退出时,数据还以文件等形式保存在存储设备(硬盘,光盘等)中。

持久化:将程序中的数据在瞬时状态和持久状态间转换的机制。

持久化机制:JDBC;实现:将程序中的数据直接保存成文本文件,保存到数据库。

DAO层(数据访问层)也可称之为持久化层,承担的主要工作即将数据保存到数据库或从数据库中读取出来。

5.2.2:对象—关系映射

理解:我们多以面向对象的方式组织程序,瞬时的数据也多以对象的形式存在,而持久化的数据多保存在关系型数据库中。所以,持久化工作主要在O(Object,对象)和R(RelationalDatabase,关系型数据)之间完成。Hibernate:在JDBC的方式上进行封装,以简化JDBC方式繁琐的编码工作。(不用编写SQl语句,不用为每个字段置PreparedStatement中参数的值,只需要简单的执行session.save(user)即可把user对象保存到数据库中。

对象—关系映射机制(O/RMapping,ORM):保存对象和关系数据库表的映射信息,当数据在对象和关系数据库中转换的时候,协助正确的转换。(编写程序时以面向对象方式处理数据,保存数据的时候却以关系型数据库的方式存储,客观上需要一种两者间的转换机制)

5.3:使用Hibernate的基本步骤

5.3.1:准备工作

(3个准备:提供项目对Hibernate的支持,Hibernate.cfg.xml,User.hbm.xml)

1,需要的Jar包;

(hibernate3.jar是Hibernate的核心包;asm相关包用来支持字节码的动态生成,是必需的;common-*包是ApacheCommon项目提供的,包含集集合工具,日志,接口等,Hibernate实现过程中使用了这些开源工具)

2,Hibernate配置文件(7个);

4个连接参数(hibernate.connection.*),一个必需的方言dialect(<propertyname="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>),一条声明——在另外的映射文件中定义的数据库表和实体的映射信息。

一个SQL语句是否输出的配置(<propertyname="hibernate.show_sql">true</property>),一个工具类的使

用(<propertyname="hibernate.hbm2ddl.auto">update</property>),还有每个实体类对应的配置文件的

信息的配置(<mappingresource="pojo/Qx.hbm.xml"/>)。

3,实体类和映射文件

定义的实体类需要:实现implementsjava.io.Serializable接口,添加默认构造方法。

在映射文件中配置实体类映射到数据库的那张表,哪个属性对应到数据库的哪个字段。

5.3.2:使用Hibernate实现用户添加

七个步骤:

1,读取并解析配置文件————相当于使用DataSource获取连接前读取DataSource的配置文件

2,读取并解析映射信息,创建SessionFactory————相当于创建DataSource对象

3,打开session————相当于JDBC获得连接

4,开始事务(增删改操作必须,查询操作可选)————开始事务

5,持久化操作————相当于JDBC的持久化操作

6,提交事务————提交事务

7,关闭连接

5.4:使用Hibernate实现数据库的删改

5.5:使用工具简化Hibernate开发

简化开发:充分利用工具,精巧的设计。

1,简化“三个准备”:

使用工具给项目添加Hibernate支持,自动添加Hibernate配置文件。

DBConnectionProfile,使用向导配置数据库连接信息:在DatabaseProfile对话框中,Profilename可以随便起名,URL必需填写正确,在SchemaDetails对话框中,选择正确的数据库,单击完成,MyEclipse就会自动在Hibernate配置文件中配置好数据库参数。

Properties部分和Mapping部分也有相应的向导。

映射文件使用工具自动生成:从Eclipse工作区右上角选择进入MyEclipseDatabaseExplorer透视图(可以通过菜单“窗口”—“透视图”—“MyEclipseDatabaseExplorer”进入),在DBBrowser(数据库浏览器)视图中,逐次展开节点,用鼠标右键选择TBL_USER表,在弹出的菜单中选择“HiberanteReverseEngineering”(Hibernate反向工程),再弹出的对话框中选择生成实体类和映射文件的包名(JavaPackage),选中“Hibernatemappingfile....”复选框,表示要生成的映射文件;选中“JavaDataObject....”复选框表示要生成实体类。单击下一步,在“Configtypemappingdetails”对话框中,IDGenerator选“native”,继续单击“下一步”,在“Configreverseengineeringdetails”中,保持所有复选框为选中,单击“完成”按钮。

2,简化“七个步骤”(使用提取重复代码到基类):

在给项目添加Hiernate支持的过程中还生成了一个“HibernateSessionFactory”工具类。

将“套路”代码提取到BaseHibernateDAO中,如下:

(注意:get和delet的传入参数类型为Class和Serializable。Class表示“类”,可以通过“类名.class”得到其实例;

Serializable是一个接口,不包含任何需要实现的方法,只是表示实现这个接口的类可以序列化)

5.6:在项目中使用Hibernate(5.5的第二点)

小结:

“三个准备”,”七个步骤“,使用工具简化“三个准备”,使用提取重复代码到基类简化“七个步骤”。

注意:

一,对工具类的使用

1,org.hibernate.tool.hbm2ddl.SchemaExport

相关配置:

在hibernate.cfg.xml文件中,<propertyname="hibernate.hbm2ddl.auto">update</property>

源代码的编写:

importorg.hibernate.cfg.Configuration;

importorg.hibernate.tool.hbm2ddl.SchemaExport;

publicclassExportDB{

publicstaticvoidmain(String[]args){

Configurationcon=newConfiguration().configure();

SchemaExportse=newSchemaExport(con);

se.create(true,true);

}

}

作用:

根据实体类的配置文件在建好的数据库自动生成表,配置文件中的update代表每次都进行更新,而create的话则是进行创建(如果表存在则会报出异常)

二,BaseHibernateDao的套路代码(通用的增删改查方法以及获得和关闭session的方法——考虑:这些方法写成静态的还是非静态的?为什么那样写?)

相关推荐

LetonLIU / 0评论 2020-05-29
东方咖啡屋 / 0评论 2020-01-06