Hibernate相关知识点

本文深入探讨了Hibernate框架的关键概念,包括ORM思想、Session机制、get与load的区别、缓存机制、快照机制及对象状态等,旨在帮助读者理解如何高效地使用Hibernate进行数据库操作。

最近在复习Hibernate框架的时候,发现有一些细节忘记了,所以写一篇总结下重要的几个知识点。

ORM思想

ORM指的是Object Relation Mapping对象关系映射,它可以让我们以面向对象的方式操作数据库,具体点就是操作实体类即是操作数据库表,操作类的属性即是操作数据库字段。

Session

此Session应该与WEB的四大域对象的Session区分开,这个是Hibernate与数据库进行交互的核心对象。首先Session是线程不安全的,所以在程序中应该避免多个线程共用一个Session。其次Session是轻量级的,即创建和销毁的内存非常少,意味着我们在程序中可以为每个客户端分配单独的Session。最后,在Session中,对数据库的操作都是在事务中进行的。

get和load

在Hibernate中有两个查询实体的方法,get和load,它们的区别主要有:
查询时机的不同:get方法采用立即加载,马上执行sql语句到数据库中查询出数据;load方法采用的是延迟加载,即只有在真正使用到实体类的非OID属性时才会向数据库发起查询。
返回对象的不同:get方法总是会返回实体类对象;load方法当配置的是延迟加载策略时(默认即是),返回的是一个代理对象。

一级缓存

Hibernate的一级缓存即是Session的缓存,它是一块内存空间,用来存放对象,当执行查询操作的时候会拿着OID来缓存中寻找,找到了就返回,没找到再发起查询,然后添加对象到缓存。当然还有一个二级缓存,指的是SessionFactory的缓存,Hibernate设置缓存机制的目的就是:减少与数据库的交互次数,提高执行效率。

快照机制

Hibernate在向一级缓存存储数据的时候,会同时复制一份数据到快照中,当事务提交的时候,会根据OID比较一级缓存和快照中的数据是否一致,如果不一致,则执行update操作将一级缓存的数据同步到数据库,并且更新快照。快照机制的目的:保证一级缓存和数据库的数据一致。

对象状态

Hibernate有三种对象状态,瞬时态、持久态、游离态。
瞬时态:即我们程序中new出来的数据,没有OID,和Session没关联。
持久态:有OID,和Session有关联。
游离态:有OID,和Session没有关联。

三种查询方式

在Hibernate中我们可以根据HQL、QBC、原生SQL进行查询。
HQL:使用session.createQuery方法,传入一个HQL语句得到Query对象。然后进行赋值后执行查询。HQL语句用类名代替表名,类的属性名代替表的字段名,可以省略select *直接从from开始组装语句。可以使用?做占位参数符也可以使用 :加命名的方式,例如 :age。
QBC:Query By Criteria,可以以一种完全面向对象的方式进行查询,而不用编写SQL语句。使用session.createCriteria方法传入实体类的字节码,然后添加查询条件,通常会使用Restrictions的静态方法进行添加。
原生SQL:使用session.createSqlQuery方法,传入Sql语句。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值