Oracle培训(三十五)——Hibernate第一章知识点总结——Hibernate第1章-概述
目标
理解数据持久化概念
了解ORM应用背景及原理
了解市场主流ORM框架
理解Hibernate基本原理
掌握Hibernate开发步骤
熟练应用Hibernate API
知识点预览
数据持久化
JDBC复习
ORM
Hibernate
数据持久化
1.对象持久化
a)持久(Persistence):
数据保存到可掉电设备中
企业级应用中,即把内存中(瞬时)的数据保存到磁盘中加以“固化”
2.对象持久化技术
a)Java对象序列化和反序列化
数据查询困难,效率低
b)通过XML保存对象
复杂的xml操作
用于应用或公司间进行数据传输
c)JDBC
关系型数据库(RDBMS),SQL(DDL, DML)
低水平的数据操作
d)对象关系映射(ORM)
JDBC复习
1.JDBC编程步骤
a)注册驱动
b)建立到数据库的连接
c)创建statement
d)执行SQL语句
e)处理ResultSet
f)关闭JDBC对象
缺点:重复的编程步骤
2.JDBC数据封装
a)JDBC数据封装过程
b)缺点:编程人员大部分精力花费在对ResultSet数据封装
ORM
1.什么是ORM
a)ObjectRelational Mapping (对象关系映射)
b)通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。
2.一般ORM包括四个部分
a)一个对持久类对象进行CRUD操作的API
b)一个语言或API用来规定与类和类属性相关的查询
c)一个规定元数据映射的工具
d)一种技术可以让ORM的实现同事务对象一起进行dirty checking, lazy association fetching以及其他的优化功能
3.为什么采用ORM模式
a)提高生产率(Productivity)
b)可维护性(Maintainability)
c)更好的性能(Performance)
d)厂商独立性(Vendor independence)
4.ORM 主流框架介绍
a)Hibernate
开源、性能、稳定性
b)TopLink
Oracle商业商业产品
c)Ibatis
开源、开放性
d)Apache OJB
开源、性能、稳定性、支持各种标准规范
e)说明:
其中 TopLink 是 Oracle 的商业产品,其他均为开源项目。
其中 Hibernate 的轻量级 ORM 模型逐步确立了在 JavaORM 架构中领导地位,甚至取代复杂而又繁琐的 EJB 模型而成为事实上的 JavaORM 工业标准。而且其中的许多设计均被 J2EE 标准组织吸纳而成为最新EJB 3.0 规范的标准,这也是开源项目影响工业领域标准的有力见证。
Ibatis:最大的特点就是允许用户自己定义SQL来组配Bean的属性
Apache OJB:OJB代表Apache Object Relational Bridge,是Apache开发的一个数据库持久型框架
Hibernate
1.Hibernate简介
a)Hibernate发展历程
2001年发布第一个版本
2003年发布hibernate2(提供对大多数数据库支持,提供完善的数据关联、事务管理,缓存管理,延迟加载,同时提供堪称典范开发文档供用户使用)
2005年发布hibernate3(更加丰富和完善的数据库支持,实体属性的延迟加载、对存储过程和自定义持久化和支持,同时性能测试也令人满意)
目前最新版本hibernate4
b)Hibernate强大功能
按照java基础语义(关联、继承、多态、组合及java集合框架)的持久层开发
面对对象查询语言(HQL)
2.Hibernate环境配置
a)库文件包
i.antlr.jar—HQL转换工具
ii.asm.jar,asm-attrs.jar—generate and transform classes
iii.cglib.jar—实现PO字节码的动态生成
iv.dom4j.jar—读写xml
v.hibernate3.jar—核心包
vi.jta.jar—JAVA 事务处理接口
vii.commons-collections.jar—Apache Commons包中的一个,开发的集合类
viii.commons-logging.jar—Apache Commons包中的一个,日志功能
ix.ojdbc14.jar—oracle驱动包
x.c3p0.jar—数据库连接池
xi.ejb3-persistence.jar,hibernate-annotations.jar—注解基础包
xii.hibernate-entitymanager.jar—JPA支持包
xiii.javassit.jar—代码生成包
xiv.jboss-archive-browsing.jar—supportJPA entity manager
3.Hibernate应用组成
a)DDL(可选)—sql
b)POJO(plain object java obiect)—持久化类
Id
需映射属性的get/set方法
空参构造方法
c)Hibernate配置文件—hibernate.cfg.xml or hibernate.properties
d)创建对象-关系映射—.hbm.xml or 注解
e)通过HibernateAPI 访问数据库的代码
4.Hibernate项目结构
5.Hibernate开发步骤—DDL
CREATE TABLET_USER
(
USERIDNUMBER NOT NULL ENABLE,
USERNAMEVARCHAR2(200 BYTE),
USERADDRESS VARCHAR2(200 BYTE),
USERAGENUMBER,
CONSTRAINT "T_USER_PK" PRIMARYKEY ("USERID”)
)
6.Hibernate开发步骤—POJO
public class User {
private Integer userId;
private String userName;
private String userAddress;
private Integer userAge;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
7.Hibernate开发步骤—配置文件
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<!-- 数据库用户名 -->
<property name="connection.username">boolar</property>
<!-- 数据库用户密码 -->
<property name="connection.password">boolar</property>
<!-- 驱动类 -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!-- 数据库URL -->
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<!-- 数据库方言-->
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<!-- 是否在SessionFactory创建后,自动创建数据库表,none/create/create-drop/update-->
<property name="hbm2ddl.auto">create</property>
<!-- 是否把执行的SQL语句输出到控制台 -->
<property name="show_sql">true</property>
<!-- 是否把控制台SQL语句格式化 -->
<property name="format_sql">true</property>
<!-- 映射文件配置,配置文件名必须包含其相对于根的全路径 -->
<mapping resource="com/oracle/entity/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
8.Hibernate开发步骤—映射文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.oracle.entity.User" table="T_USER">
<id name="userId" type="java.lang.Integer">
<column name="userId" length="32" />
<generator class="native" />
</id>
<property name="userName" type="java.lang.String">
<column name="userName" />
</property>
<property name="userAddress" type="java.lang.String">
<column name="userAddress“ />
</property>
<property name="userAge" type="java.lang.Integer">
<column name="userAge" />
</property>
</class>
</hibernate-mapping>
9.Hibernate开发步骤—API应用步骤
a)创建hibernate配置,读取Hibernate配置文件及信息
b)用读取的配置信息生成SessionFactory对象
c)从SessionFactory对象获取 一个Session对象
d)用Session对象生成事务
e)通过Session对象的方法进行操作
f)提交或回滚事务
g)释放session andsession factory资源
10.Hibernate开发步骤—使用API
package com.oracle.test;
public class Test {
public static void main(String[] args) {
User user = new User();
user.setUserName("zz");
user.setUserAddress("beijing");
user.setUserAge(21);
//step1: 创建配置
Configuration cfg = new Configuration().configure();
SessionFactory sf = null;
Session s = null;
Transaction tran = null;
try {
sf = cfg.buildSessionFactory();//step2:构造会话工厂
s = sf.openSession();//step3:打开会话
tran = s.beginTransaction();//step4:启动事务
s.save(user);//step5:持久化对象
tran.commit();//step6:提交事务
} catch (HibernateException e) {
e.printStackTrace();
tran.rollback();//step6:回滚事务
}finally{
if(s!=null){s.close();}if(sf!=null){sf.close();}//step7:释放资源
}
}
}
11.Hibernate核心API
a)Session
是数据连接与事务管理 间的中间接口,它是非线程安全的,所以一个线程只创建一个Session对象。
save()/beginTrasaction()/close()/delete()/get()/load()/persist()/saveOrUpdate()/update()
b)SessionFactory
负责创建Session对象, SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。可以通过Configuration对象创建SessionFactory对象。
openSession()/close()
c)Configuration
配置hibernate,启动hibernate 时读取cfg.xml ,创建SessionFactory对象。
config()
d)Transaction
数据库事务接口, 可选接口,将应用代码从底层的事务实现中抽象出来,可能会是:
JDBC事务
JTA 用户事务
commit()/rollback()
e)Query
查询接口,query实例包装了HQL查询语句。
list()/setXXX()
f)Criteria
查询接口,用于创建和执行条件查询,更面向对象。
list()/add()/createCriteria()
本章总结
持久化概念
对象关系映射(ORM)
Hibernate开发步骤
Hibernate API