hibernate的总结.docx

上传人:b****3 文档编号:10931047 上传时间:2023-05-28 格式:DOCX 页数:17 大小:20.83KB
下载 相关 举报
hibernate的总结.docx_第1页
第1页 / 共17页
hibernate的总结.docx_第2页
第2页 / 共17页
hibernate的总结.docx_第3页
第3页 / 共17页
hibernate的总结.docx_第4页
第4页 / 共17页
hibernate的总结.docx_第5页
第5页 / 共17页
hibernate的总结.docx_第6页
第6页 / 共17页
hibernate的总结.docx_第7页
第7页 / 共17页
hibernate的总结.docx_第8页
第8页 / 共17页
hibernate的总结.docx_第9页
第9页 / 共17页
hibernate的总结.docx_第10页
第10页 / 共17页
hibernate的总结.docx_第11页
第11页 / 共17页
hibernate的总结.docx_第12页
第12页 / 共17页
hibernate的总结.docx_第13页
第13页 / 共17页
hibernate的总结.docx_第14页
第14页 / 共17页
hibernate的总结.docx_第15页
第15页 / 共17页
hibernate的总结.docx_第16页
第16页 / 共17页
hibernate的总结.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

hibernate的总结.docx

《hibernate的总结.docx》由会员分享,可在线阅读,更多相关《hibernate的总结.docx(17页珍藏版)》请在冰点文库上搜索。

hibernate的总结.docx

hibernate的总结

Hibernate框架:

1)jdbc有什么缺点?

a)代码难于维护

b)jdbc就是拼凑sql语句,然后发送数据库当中执行,对于程序员考虑问题,更多是对sql语句编写

c)jdbc的代码,过于复杂,任何操作,都必须要使用connection等接口

2)hibernate:

最本质其实就对jdbc的一个轻量级封装

对于程序员:

完全面向对象

对于数据库:

底层执行的依然是jdbc,拼凑sql语句,发送到数据库中执行

3)使用hibernate来取代jdbc,能最大化的减少程序员的工作量

2Hibernate优点和缺点

Hibernate:

底层运行jdbc,对程序员面向对象

1)优点

a面向对象

bhibernate代码相对于jdbc代码来说,至少减少三分之一,

使用hibernate可以减少工作量

chibernate比较简单

d开源(源代码全部公开)

e成熟:

使用时间较长,版本较多,比较稳定

f可以匹配后台任意的数据库

2)缺点

性能较差(尤其大型项目数据量非常大的时候,一定不要使用hibernate,

使用jdbc)

3Orm映射框架:

ORM:

对象到表的映射

用面向对象的思维方式,操作数据库中的表

Hibernate就属于比较优秀的开源(免费)ORM映射框架

配置连接信息:

dialect:

方言,跟据不同的配置不同的方言,可以让我们

hibernate写的代码,自动去匹配后台的数据,但对数据库

进行操作的时候,hibernate把发送sql语句,自动转化为

当前数据库的sql语句,而代码不用做任何的修改

2hibernate自身配置信息

show_sql:

hibernate底层运行的是jdbc执行sql语句,

把底层发送给数据库的sql语句,显示到当前控制台上,用于调错

3.Orm映射文件:

当前所有要执行orm映射文件,必须

全部配置hibernate.cfg.xml文件才被识别和使用

b)orm映射文件:

po类名.hbm.xml

从eg里:

po类《--------->Orm映射文件<---------》表

3)使用hibernate核心工具类

Configuration:

读取hibernate的核心的配置文件

hibernate.cfg.xml文件

SessionFactory:

a)重量级对象(功能强大,消耗资源较多),SessionFactory

重量级对象

b)可以创建Session对象

c)控制hibernate中二级缓存

d)控制配置文件hibernate.cfg.xml

e)。

尽量只创建一次

企业开发:

SessionFactory一般只创建一个,生命周期,从

项目启动到项目关闭(维护)位置,一个数据库只能对应一个

SessionFactory,最本质创建session对象

3)

Session

hibernate对外执行操作的对象

增删查改的操作全是都是通过session来实现的,

1使用session实现增删查改

1)查询get()

特点:

get(po类名.class,id):

根据id查询,返回的结果是

po对象

如果要查询的对象不在数据库中,返回值为null值

2)修改update(Po对象)

特点:

先查询要修改的对象,然后再使用update操作

(如果直接使用id,直接修改对象,容易出现没修改的列,全部使用

默认值)

eg:

test/SessionTest

3)删除delete(po对象)

detele(po对象)

4)load()重点

eg:

test/SessionTest

2延迟加载

1)定义:

当查询对象的时候,不是立刻发出sql语句,当访问该对象中

的某些属性,才真实的去数据库中查询数据

2)为什么hibernate需要延迟加载?

hibernate性能较弱,可以通过延迟加载的方式,以提高其性能,

减少无谓性能开销

3)load()使用了延迟加载,当查询对象的时候,hibernate并

没有发出任何的sql语句,返回一个代理对象,来暂时代替要查询对象

4)代理对象

动态代理:

由系统来帮我们生成对应的代理对象,可以为任何类生成

代理对象

企业开发中:

最常用有两种代理

a)cglib动态代理:

返回的是要代理对象的子类对象

eg:

父类对象=new子类对象

Empemp=cglib返回是Emp类的子类对象

3load()底层如何执行的

Empemp=(Emp)session.get(Emp.class,2);

---->load返回是cglib动态代理返回的一个代理对象(Emp的子类对象)

System.out.println(emp.getId());

---->不发送sql语句,id本身就有,不要去数据库中查询

System.out.println(emp.getEname());

---->真实的发送sql语句,当真正要访问该对象的时候,代理对象就会发出sql语句去

数据库中真实的查询

4对比get方法和load方法

get方法:

直接去数据库中查询根据id查询对应的数据,如果不存在,返回null

load方法:

先返回一个代理对象,只有真实去访问该对象的属性,才发出sql语句去数据库中真实的查询,

如果该对象不存在,抛出异常

5映射类型

hibernate映射类型:

1)整数类型

integer,long,byte,short

2)浮点数

float,double

3)字符串

string

4)日期(yyyy-mm-dd)

date

5)时间(HH:

MM:

SS)

time

6)日期+时间(yyyy-mm-ddHH:

MM:

SS)

timestamp

7)boolean---->char

(1)类型

yes_no:

把true---->Y,false---->N

true_false;

案例:

hibernate03

Person

6主键的生成策略

使用hibernate当前表的主键如何生成就是主键的生成策略

比如save(po对象),hibernate根据主键生成策略来生成对应的主键id值

1)identity

应用于数据库底层自动增长机制生成对应的主键,常用的mySQL,SQLServer

2)sequence

主键的值采用指定的序列生成,常用oracle,DB2

foo_seq(标识值)/parma>

3)native

根据方言dialect的不同,选择不同的主键生成方式,根据数据库自动匹配其对应的主键

生成方式(identity或sequence)

智能选项,使用最为广泛

比如mysql数据库,自动改为identity

Oracle数据库,自动改为sequence

4)uuid:

是hibernate自动的来帮我们生成主键,当插入数据的时候,随机生成一个不重复

的32字符串,作为主键的值

案例:

User3

5)assigned:

当前的主键交由程序员自己去维护,缺点:

当数据量过大,很难维护,开发使用较少

ernate(三)星期六9月28日

知识点

1多对一单向关联映射(企业开发中使用最为广泛)

“多”的一端来维护关联关系,在hibernate中,po类中含有对

一得一端的引用,在修改orm映射文件

eg:

员工----------》部门

学生----------》班级

市----------》省

1)现实生活中这些多对一得情况,可以转化数据库中的表的设计,多

对一的设计,hibernate可以帮我们来创建这种设计的表,也可以

操作这样类型的表

2)hibernate中最重要就是各种关联映射

oracle:

全是对单表的设计,讲过外键

真正的企业开发中的,永远是多表之间的关联关系

3)hibernate当中多对一关联映射

orm的映射文件,重点在多的一端,多的一端来维护关联关系

//

维护多对一得关系的标签

//name:

po类中的引用属性

//class:

当前跟那个类有关联关系(主键)

//column:

维护该关联关系的外键的名字,

//该值是class这个类的主键的值

class="com.po.Dept"column="did"

>

orm文件中,指定表的名字(table="t_dept"),字段的名字(column="did"),各种约束(unique="false"not-null="true"),字段长度(length="")

案例:

hibernate06

2一对多关联映射

"一"的这一端来维护关联关系

eg:

customerorder

1)po类

publicclassCustomer{

privateintid;

privateStringcname;

privateSetorders;

...

}

保存多个数据:

数组和集合

数组:

元素个数固定

集合:

list:

特点跟数组及其相似,有序

set:

特点跟数学中的集合很相似,无序

map:

一一对应(key---value)

在这里我们选择使用set集合,order数量不固定,无序

2)hibernate特点:

通过orm映射文件设置表,操作表

对于程序员:

考虑对象之间的关系,而不是表与表之间的关系,

使用hibernate时候,操作是po对象,思考po类之间的关系

当编写orm映射文件:

必须考虑表和表对应的po类之间关系

编写好orm映射文件之后,所有对数据库中表的操作,全部都是对

po对象的操作,hibernate底层去操作表

3)一对多映射文件

--

一对多关联,由一的一端来维护关联的关系,在表上面的体现,由

一的一端在多的一端的表上创建外键cid,值是当前一的这端

表的主键的值

-->

4)可以对po类对象任意的操作,都会对t_order和t_customer产生影响

案例:

hibernate07

3多对一双向关联映射

双向:

双方都来维护彼此的关联关系

注意:

orm映射文件中,列名要注意

修改hibernate07案例:

一的一端

多的一端

class="com.po.Customer"

column="cid"

>

如果是双向关联,多的一端维护的关联关系的外键名字必须跟

一端保持一致(维护双方关联关系外键的名字必须一致)

4关联映射中的两个属性

1)inverse:

"反转",hibernate含义,是否放弃维护关联关系

默认值是false:

维护两张表的关联关系

true:

放弃维护两张表的关联关系

2)cascade:

"级联",一张表发生变化,另一张与之关联的表也

发生了变化

a)save-update:

与之关联的表也随之发生save()/update()/saveOrUpdate();

b)none:

默认值,任何情况下都不进行任何关联操作

"一"的一端被删除,“多”的一端仅仅删除关联关系,即外键的值

c)delete:

与之关联的表也随之发生执行delete操作

d)all:

包含save-update和delete,企业开发中

最常配置的参数

e)all-delete-orphan:

除了all的功能以后,还能从

集合端删除

5多对多单(双)向关联映射

一家公司

员工职位

多对多:

表------》3张表,其中一张表维护关联关系

hibernate当中

po类-----》2个po类,第3张表关联表是由维护关联关系

一端来通过set标签来创建

--set:

多对多,创建第3表,维护多对多的关联关系

table------第3张表的名字

uid的值是当前主键的值

jid列的值,是Job的主键的值

-->

1多对多双向关联映射

hibernate08

column="uid"

>

2一对一主键(单向)关联映射

表:

t_person:

(id,pname)

t_card:

(id,cardNo)

一对一:

两张表中的数据,必须是一一对应的才可以

hibernate实现这样的表,有两种方式,

一对一主键单向关联映射:

两张表的主键,必须是一样的,也就是两张表共用同一个主键

//当前person的主键参照外键

card

//参照的是自身的属性(property),是card属性的值

//关联到card这个类,值默认就是Card的主键的值

class="Card"constrained="true">

一对一主键关联映射默认,cascade级联属性(save)(cascadem默认有个保存操作)

3一对一主键(双向)关联映射

hibernate09

Person.hbm.xml代码:

card

--constrained="true"维持约束关系-->

Card.hbm.xml代码:

4一对一外键(单向)关联映射

一对一外键(单向)关联,是多对一的特例,要求维护关联关系的外键,约束是唯一

案例:

hibernate10

column="cardId"unique="true">

5一对一外键(双向)关联映射

案例:

hibernate10

column="cardId"unique="true">

property-ref="card">

注意:

property-ref="card"(重点):

对应表中cardId的值,要Person中

的cardId的值与Card中的id主键值相对应

property-ref="card":

对应t_person表中cardId的值,要t_person中的

cardId的值与t_card中的id主键值相对应,避免录入空数据,有时候在t_card中会录入空值,

避免了t_person在于t_card对应的时候,读到空值,而造成两个表的数据错位

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2