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的方法——考虑:这些方法写成静态的还是非静态的?为什么那样写?)