hibernate的工作原理

①读取并解析配置文件。
②读取并解析映射信息,创建SessionFactory。
③打开Session
④创建事务Transaction。
⑤持久化操作。
⑥提交事务。
⑦关闭Session。
⑧关闭SessionFactory。

使用Hibernate的原因:
对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,它在很大程度上简化了DAO层的编码工作。
Hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
Hibernate的性能非常好,因为它是一个轻量级框架,映射的灵活性很出色。它支持各种关系型数据库,从一对一到多对多的各种复杂关系。
Hibernate 的缓存体系
一级缓存:
Session 有一个内置的缓存,其中存放了被当前工作单元加载的对象。
每个Session 都有自己独立的缓存,且只能被当前工作单元访问。
二级缓存:
SessionFactory的外置的可插拔的缓存插件。其中的数据可被多个Session共享访问。
SessionFactory的内置缓存:存放了映射元数据,预定义的Sql语句。
Hibernate 中Java对象的状态

如何优化Hibernate?

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

Hibernate有哪几种查询数据的方式

3种:hql、条件查询QBC(QueryBy Criteria)、原生sql (通过createSQLQuery建立)

JDBC hibernate 和 ibatis 的区别

jdbc:手动 
手动写sql 
delete、insert、update要将对象的值一个一个取出传到sql中,不能直接传入一个对象。 
select:返回的是一个resultset,要从ResultSet中一行一行、一个字段一个字段的取出,然后封装到一个对象中,不直接返回一个对象。 
ibatis的特点:半自动化 
sql要手动写 
delete、insert、update:直接传入一个对象 
select:直接返回一个对象 
hibernate:全自动 
不写sql,自动封装 
delete、insert、update:直接传入一个对象 
select:直接返回一个对象

Hibernate的五个核心接口

Configuration 接口:配置Hibernate,根据其启动hibernate,创建 
SessionFactory 对象; 
SessionFactory 接口:初始化Hibernate,充当数据存储源的代理,创建 
session 对象,sessionFactory 是线程安全的,意味着它的同一个实例可以被应 
用的多个线程共享,是重量级、二级缓存; 
Session 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的, 
避免多个线程共享同一个session,是轻量级、一级缓存; 
Transaction 接口:管理事务; 
Query 和Criteria 接口:执行数据库的查询。

Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)

类与类之间的关系主要体现在表与表之间的关系进行操作,它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、

Hibernate是如何延迟加载?

当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。

如何在控制台看到hibernate生成并执行的sql

在定义数据库和数据库属性的文件applicationConfig.xml里面,把hibernate.show_sql 设置为true 
这样生成的SQL就会在控制台出现了 
注意:这样做会加重系统的负担,不利于性能调优

hibernate的三种状态之间如何转换

当对象由瞬时状态(Transient)一save()时,就变成了持久化状态; 
当我们在Session里存储对象的时候,实际是在Session的Map里存了一份, 也就是它的缓存里放了一份,然后,又到数据库里存了一份,在缓存里这一份叫持久对象(Persistent)。 
Session 一 Close()了,它的缓存也都关闭了,整个Session也就失效了,这个时候,这个对象变成了游离状态(Detached),但数据库中还是存在的。 
当游离状态(Detached)update()时,又变为了持久状态(Persistent)。 
当持久状态(Persistent)delete()时,又变为了瞬时状态(Transient), 此时,数据库中没有与之对应的记录。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值