hibernate总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1:
ORM主要解决的问题是对象--关系的映射。一班情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录。
2:
常用的5个核心接口介绍
(1)Configuration接口,用于配置并根启动Hibernate。
(2)SessionFactory接口,一个SessionFactory实例对应一个数据库存储源,它是线程安全的,重量级的,之所以称
它为重量级,是因为启动它要一个很大的缓存,当然,用户可以为它配置二级缓存
(3)Session接口,不是线程安全的,Session实例是轻量级的,它有一个第一级缓存
(4)Transaction接口,是Hibernate的数据库事务接口,
(5)Query和Criteria接口,它们是Hibernate的查询接口,Query实例包装了一个HQL查询词句,HQL是面象对象的,
它引用类名和类的属性,而不是表名和表的字段
3:
持久化类的默认规则
(1)对属性的操作,一这要用setXXX()和getXXX()这样的命名,如果是boolean类型,则可以用isXXX()命名
(2)最好实现java.io.Serialiizable接口,
(3)必须提供一个不带参数的,最好是public或protected的默认构造方法
4:
数据类型的映射过程是,先参照表字段类型,再比较java类型,最后由上两种来决定hibernate数据类型
5:
(1)name,指定的是java类中的属性名
(2)column,与java类对应的数据库表名
(3)not null,java类的某个属性是否可为空,在应用应用层检查,即持久化前
(4)type,Hibernate中间件的过度型数据类型,
(5)access,设定对于java类属性,是用getXXX()和setXXX()方法(property),还是直接访问(field)
(6)dynamic,设定hibernate生成sql语句的方式,在update,insert时,只对有修改过的字段进行CRUD操作
6:
我们可以自己对getXXX()和setXXX()方法加入逻辑,这是很灵活的
7:
只要在xxx.hbm.xml中映射了数据库表中的字断,就可以用HQL语句检索
8:
Session.close()---清空缓存
Session.flush()---清理缓存,对比数据库中表的记录,并执行SQL语句,但不会提交事务
mit()---清理,执行SQL,并提交事务
9:
Session.load()---当数据库表中没有该记录时,会抛出异常,并受到类级别加载设置的影响,如延迟加载
Session.get()---当库中无记录时,返回null
Session.find()---将被淘汰,也是不推荐使用的方法,用query代替
10:
比如在一(user)对多(book)的关联中,会有
11:
---------------------------------------------------------------------------------------------------------------------------
下面开始介绍各种映射策略
1:
映射自然主键表,代理主键表,复合主键表,这种映射比较简单,也比较常用
2:
映射单向一对多,和多对一关联
3:
映射双向一对多关联(也叫做双向多对一关联)
4:
怎样提高Hibernate的综合性能
(1)关联级别延迟加载首选设置为lazy=false
(2)最好用多对一单向关联,
lazy=true
(3)在一对多关联中,
(4)关联类属性首选设置为cascade=save-update,或cascade=all(将删除一切关联的数据)
(5)可以设置类级别和关联级别的批量延迟检索和立即检索,batch-size,可以减少和简化Hibernate生成的SQL语句条
数,以提高查询性能
(6)outer-join属性在