hibernate

hibernate的三种状态:临时状态,持久状态,游离状态
持久就是把数据永久的保存在某种设备上。

hibernate 工作原理以及为什么要用?
1.读取并解析配置文件
2.解析映射信息(就是类中的字段与表中的字段进行映射)
3.sessionfactory创建session并打开session
4.创建事务对象 transaction
5.持久化操作
6.提交事物 session.commit
7.关闭session
8.关闭sessionfactory
1.hibernate对JDBC访问数据库的代码进行了封装,大大简化了对数据库访层的重复繁琐的代码。
2.hibernate是基于JDBC的持久化框架,是一个优秀的ORM实现,很大程度的简化了dao层的编码
工作。(ORM 对象关系映射 object relation mapping 是一种数据转化技术)
3.hibernate使用java反射机制,而不是字节码,增强程序来实现透明性。(java反射)
4.hibernate的性能非常好,因为它是一个轻量级框架,映射的灵活性和出色,支持各种关系数据 库,能够实现从一对一到多对多的各种复杂关系。

hibernate是如何延迟加载的?
hibernate2:1.实体对象,2.集合,
hibernate3: 1.属性,类(实体对象),集合
当hibernate在查询数据的时候,数据并没有存在内存当中,当程序操作数据时,数据才存在内存中,目的:节省服务器的开销,提升服务器的性能。
类与类的之间的关系主要体现在表与表之间的关系进行操作!


hibernate的缓存机制
节省服务器的开销,提升服务器的性能。
1.Hibernate一级缓存又称为“Session的缓存”:内部缓存
Session内置不能被卸载,Session的缓存是事务范围的缓存(Session对象的生命周期通常对应一个数据库事务或者一个应用事务)。
一级缓存中,持久化类的每个实例都具有唯一的OID。
2.Hibernate二级缓存又称为“SessionFactory的缓存”。
由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。
第二级缓存是可选的,是一个可配置的插件,默认下SessionFactory不会启用这个插件。


Hibernate是一个持久层框架,经常访问物理数据库。
为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。
缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。

hibernate的查询方式
Hibernate查找对象如何应用缓存?
当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;如果都查不到,再查询数据库,把结果按照ID放入到缓存删除、更新、增加数据的时候,同时更新缓存。

hibernate查询的6种方法。分别是 HQL查询,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询
常用的有:HQL、Criteria、Sql

1.使用HQL需要四步
得到Session、编写HQL语句、创建Query对象(Query接口是HQL 查询接口。它提供了各种的查询功能)、执行查询,得到结果
2.Criteria 查询采用面向对象方式封装查询条件,又称为对象查询;
就是对SQL 语句进行封装,采用对象的方式来组合各种查询条件
由Hibernate 自动产生SQL 查询语句
3.使用SQL语句查询(以下都是使用了Spring框架的写法)
1).这是把执行结果放到了一个类里:(这个类通常使用VO实体,VO实体一般就只用来接收查询结果)

如何优化hibernate
1.使用双向一对多关联,不使用单向一对多
2.灵活使用单向一对多关联
3.不用一对一,用多对一取代
4.配置对象缓存,不使用集合缓存
5.一对多集合使用Bag,多对多集合使用Set
6. 继承类使用显式多态
7. 表字段要少,表关联不要怕多,有二级缓存撑腰

hibernate框架的认识
Hibernate是一个轻量级的持久层开源框架,它是连接Java应用程序和关系数据库的中间件,负责Java对象和关系数据之间的映射.
Hibernate内部对JDBC API进行了封装,负责Java对象的持久化.
因为它封装了所有的数据访问细节,使得业务逻辑层可以专注于实现业务逻辑.
它是一种优秀的ORM映射工具,提供了完善的对象-关系映射服务,开发过程不依赖容器,灵活性非常大,可以无缝集成到任何一个java系统中

hibernate的性能问题
在批操作性能和cache之间存在不可调和的矛盾,
你要熟悉hibernate一级和二级缓存机制才能写出合理批操作代码,
否则不但性能低下,还可能导致out memory。
hibernate reference文档中的Best practise也提到,
Use hand-coded JDBC in bottlenecks,
也就是说在某些性能瓶颈的地方考虑使用硬编码jdbc。

hibernate的核心类是什么,它们相互关系是什么?重要方法是什么?

Configuration 接口:配置Hibernate,根据其启动hibernate,创建SessionFactory 对象;
SessionFactory 接口:初始化Hibernate,充当数据存储源的代理,创建session 对象,sessionFactory 是线程安全的,意味着它的同一个实例可以被应用的多个线程共享,是重量级、二级缓存;
Session 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的,避免多个线程共享同一个session,是轻量级、一级缓存;
Session如下方法: save,load,update,delete,
Query q=CreateQuery(“from Customer where customerName=:customerName”)
beginTransaction, close, transaction, commit
Transaction 接口:管理事务;
Query 和Criteria 接口:执行数据库的查询。







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值