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

五:使用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(Relational Database,关系型数据)之间完成。Hibernate:在JDBC的方式上进行封装,以简化JDBC方式繁琐的编码工作。(不用编写SQl语句,不用为每个字段置PreparedStatement中参数的值,只需要简单的执行session.save(user)即可把user对象保存到数据库中。                  
对象—关系映射机制(O/R Mapping ,ORM):保存对象和关系数据库表的映射信息,当数据在对象和关系数据库中转换的时候,协助正确的转换。(编写程序时以面向对象方式处理数据,保存数据的时候却以关系型数据库的方式存储,客观上需要一种两者间的转换机制)

5.3:使用Hibernate的基本步骤
5.3.1:准备工作
(3个准备:提供项目对Hibernate的支持,Hibernate.cfg.xml,User.hbm.xml)
1,需要的Jar包;
(hibernate3.jar是Hibernate的核心包;asm相关包用来支持字节码的动态生成,是必需的;common-*包是Apache Common项目提供的,包含集集合工具,日志,接口等,Hibernate实现过程中使用了这些开源工具)
2,Hibernate配置文件(7个);
4个连接参数(hibernate.connection.*),一个必需的方言dialect(<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>),一条声明——在另外的映射文件中定义的数据库表和实体的映射信息。
一个SQL语句是否输出的配置(<property name="hibernate.show_sql">true</property>),一个工具类的使
用(<property name="hibernate.hbm2ddl.auto">update</property>),还有每个实体类对应的配置文件的
信息的配置(<mapping resource="pojo/Qx.hbm.xml"/>)。

3,实体类和映射文件
定义的实体类需要:实现implements java.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配置文件。
DB Connection Profile,使用向导配置数据库连接信息:在Database Profile对话框中,Profile name可以随便起名,URL必需填写 正确,在Schema Details对话框中,选择正确的数据库,单击完成,MyEclipse就会自动在Hibernate配置文件中配置好数据库参数。
Properties部分和Mapping部分也有相应的向导。
映射文件使用工具自动生成:从Eclipse工作区右上角选择进入MyEclipse Database Explorer透视图(可以通过菜单“窗口”—“透  视图”—“MyEclipse Database Explorer”进入),在DB Browser(数据库浏览器)视图中,逐次展开节点,用鼠标右键选择 TBL_USER表,在弹出的菜单中选择“Hiberante Reverse Engineering”(Hibernate反向工程),再弹出的对话框中选择生成实体类和 映射文件的包名(Java Package),选中“Hibernate mapping file....”复选框,表示要生成的映射文件;选中“Java Data Object....”复选框表示要生成实体类。单击下一步,在“Config type mapping details”对话框中,ID Generator选“native”, 继续 单击“下一步”,在“Config reverse engineering details”中,保持所有复选框为选中,单击“完成”按钮。
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文件中,<property name="hibernate.hbm2ddl.auto">update</property>
源代码的编写:
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class ExportDB {
public static void main(String[] args) {
Configuration con=new Configuration().configure();
SchemaExport se=new SchemaExport(con);
se.create(true, true);
}
}
作用:
根据实体类的配置文件在建好的数据库自动生成表,配置文件中的update代表每次都进行更新,而create的话则是进行创建(如果表存在则会报出异常)

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






















你可能感兴趣的:(eclipse,sql,Hibernate,jdbc,MyEclipse)