8.Hibenate框架
a.对象关系映射框架(Object Relational Mapping,ORM)
b.对JDBC进行了轻量级的对象封装,是程序员把精力放在业务逻辑上,提高开发效率
c.连接数据库:DriverManager效率低,性能与用户数量相关;配置jdbc数据源
基本步骤:加载数据库驱动,获得数据库源;连接数据库,获得Connection对象;创建sql语句执行查询;返回对象集;释放资源
d.传统方式连接数据库弊端:业务处理代码和数据处理代码都是耦合在一起的,当数据库产品更换时,不利于维护
e.Hibernate对JDBC进行了轻量级的封装,它把业务逻辑层和数据持久层分离开来;
f.持久化:持久状态的数据以文件的形式保存在外存中,瞬时状态的数据是指在内存中的数据;而持久化就是将程序运行时所用到的数据在瞬时状态和持久状态之间进行转换的一种机制
g.Hibernate将三层架构中的业务逻辑层划分为业务逻辑层和持久层;持久层封装了数据访问细节,是实现数据持久化的一个逻辑层。
h.对象关系映射:用来实现程序对象和关系数据库数据之间的映射,它存放着内存中的对象和数据库表的对应关系信息,Hibernate框架使用映射文件来保存这些信息。
i.映射文件.hbm.xml文件中<id>标签定义数据库表主关键字和持久化类中属性之间的映射,<generator>指定对象标识符的生成器,它用来保持对象和记录之间的一致性
j.对象标识符(Object Identifier,OID):为了保证OID的唯一性和不可变性,应让框架自动生成
内置的对象标识符生成器:实现org.hibernate.id.IdentifierGenerator接口,该接口中有一个generate()方法
assigned:由应用程序为OID赋值,适用于自然主键
increament:增量为1,OID为short,int,long型,使用与所有数据库,对一个数据库只能单进程操作,存在并发问题
sequence:自动增长,适用于Oracle,DB2,Interbase和PostgreSQL
k.Hibernate映射类型:将java数据类型和SQL数据类型映射起来,实现转换;
l.Hibernate配置文件:.xml文件可以加载映射文件/.properties不能加载;
m.方言屏蔽了对于相同的sql语句在不同数据库里的差异
n.Hibernate的Session接口:加载配置文件,建立数据库连接,实现数据操作
1.org.hibernate.Configuration实例,读取配置文件设置hibernate运行环境
Configuration configuration=new Configuration().configure("hibernate.cfg.xml");
2。Hibernate通过org.hibernate.Session来操作数据库,而Session由org.hibernate.SessionFactory来管理
SessionFactory sessionFactory=configuration.buildSessionFactory();
3.打开Session,然后就可以进行数据库操作了
Session session=sessionFactory.openSession()
o.DAO层实现类模板:
访问属性 返回值类型 方法名(参数){
(1)获得Session对象
try{
(2)开始事务
(3)调用Session对象的数据操作方法
(4)提交事务
}catch(RuntimeErrorException re){
if(事务不为空){
(5)事务回滚
}
throw re;
}finally{
(6)关闭事务
}
}
p.关系映射:OOP中通过某一个类中声明另一个类的对象来引入类与类之间的关系;Hibernate框架根基XML映射文件对持久化类之间的关联关系进行持久化时,这种关联关系仍然存在
单向关联和双向关联:数据库中的关联关系是有方向的,通过关联关系可以从一方找到另一方
单向:只能通过一方(主控方)找到另一方,反之则不能
双向:通过关联的任一方都能够找到另一方,双方都可以作为主控方
使用连接表的关联和不使用连接表的关联:更据关联两个表时是否破坏两个表的独立性来划分
不使用连接表:使用外部关键字;这种方时属于侵入式设计方式,一个表中多了另一个表的主关键字,两个表之间不具有独立性
使用连接表:通过定义另一个表将两个表联系起来,新定义的表中的字段是原来两个表的主关键字,这种方式属于非侵入式设计方式,两个表是独立的
Hibernate定义关联关系
在持久化类中,主控方持久化类有关联对象,通常将受控方以属性的方式保存在对象中
在映射文件中使用:one-to-one,one-to-many,many-to-one,many-to-many定义映射关系;其中one-to-many,many-to-many需要使用集合持有
--判断表是否存在,如果存在则删除
declare
num number;
begin
select count(1) into num from all_tables where TABLE_NAME = 'EMP' and OWNER='SCOTT';
if num=1 then
execute immediate 'drop table EMP';
end if;
end;
a.对象关系映射框架(Object Relational Mapping,ORM)
b.对JDBC进行了轻量级的对象封装,是程序员把精力放在业务逻辑上,提高开发效率
c.连接数据库:DriverManager效率低,性能与用户数量相关;配置jdbc数据源
基本步骤:加载数据库驱动,获得数据库源;连接数据库,获得Connection对象;创建sql语句执行查询;返回对象集;释放资源
d.传统方式连接数据库弊端:业务处理代码和数据处理代码都是耦合在一起的,当数据库产品更换时,不利于维护
e.Hibernate对JDBC进行了轻量级的封装,它把业务逻辑层和数据持久层分离开来;
f.持久化:持久状态的数据以文件的形式保存在外存中,瞬时状态的数据是指在内存中的数据;而持久化就是将程序运行时所用到的数据在瞬时状态和持久状态之间进行转换的一种机制
g.Hibernate将三层架构中的业务逻辑层划分为业务逻辑层和持久层;持久层封装了数据访问细节,是实现数据持久化的一个逻辑层。
h.对象关系映射:用来实现程序对象和关系数据库数据之间的映射,它存放着内存中的对象和数据库表的对应关系信息,Hibernate框架使用映射文件来保存这些信息。
i.映射文件.hbm.xml文件中<id>标签定义数据库表主关键字和持久化类中属性之间的映射,<generator>指定对象标识符的生成器,它用来保持对象和记录之间的一致性
j.对象标识符(Object Identifier,OID):为了保证OID的唯一性和不可变性,应让框架自动生成
内置的对象标识符生成器:实现org.hibernate.id.IdentifierGenerator接口,该接口中有一个generate()方法
assigned:由应用程序为OID赋值,适用于自然主键
increament:增量为1,OID为short,int,long型,使用与所有数据库,对一个数据库只能单进程操作,存在并发问题
sequence:自动增长,适用于Oracle,DB2,Interbase和PostgreSQL
k.Hibernate映射类型:将java数据类型和SQL数据类型映射起来,实现转换;
l.Hibernate配置文件:.xml文件可以加载映射文件/.properties不能加载;
m.方言屏蔽了对于相同的sql语句在不同数据库里的差异
n.Hibernate的Session接口:加载配置文件,建立数据库连接,实现数据操作
1.org.hibernate.Configuration实例,读取配置文件设置hibernate运行环境
Configuration configuration=new Configuration().configure("hibernate.cfg.xml");
2。Hibernate通过org.hibernate.Session来操作数据库,而Session由org.hibernate.SessionFactory来管理
SessionFactory sessionFactory=configuration.buildSessionFactory();
3.打开Session,然后就可以进行数据库操作了
Session session=sessionFactory.openSession()
o.DAO层实现类模板:
访问属性 返回值类型 方法名(参数){
(1)获得Session对象
try{
(2)开始事务
(3)调用Session对象的数据操作方法
(4)提交事务
}catch(RuntimeErrorException re){
if(事务不为空){
(5)事务回滚
}
throw re;
}finally{
(6)关闭事务
}
}
p.关系映射:OOP中通过某一个类中声明另一个类的对象来引入类与类之间的关系;Hibernate框架根基XML映射文件对持久化类之间的关联关系进行持久化时,这种关联关系仍然存在
单向关联和双向关联:数据库中的关联关系是有方向的,通过关联关系可以从一方找到另一方
单向:只能通过一方(主控方)找到另一方,反之则不能
双向:通过关联的任一方都能够找到另一方,双方都可以作为主控方
使用连接表的关联和不使用连接表的关联:更据关联两个表时是否破坏两个表的独立性来划分
不使用连接表:使用外部关键字;这种方时属于侵入式设计方式,一个表中多了另一个表的主关键字,两个表之间不具有独立性
使用连接表:通过定义另一个表将两个表联系起来,新定义的表中的字段是原来两个表的主关键字,这种方式属于非侵入式设计方式,两个表是独立的
Hibernate定义关联关系
在持久化类中,主控方持久化类有关联对象,通常将受控方以属性的方式保存在对象中
在映射文件中使用:one-to-one,one-to-many,many-to-one,many-to-many定义映射关系;其中one-to-many,many-to-many需要使用集合持有
--判断表是否存在,如果存在则删除
declare
num number;
begin
select count(1) into num from all_tables where TABLE_NAME = 'EMP' and OWNER='SCOTT';
if num=1 then
execute immediate 'drop table EMP';
end if;
end;