【修真院java小课堂】浅谈hibernate

大家好,我是IT修真院郑州分院第8期学员,一枚正直善良的java程序员。今天给大家分享一下,修真院官网 java任务中可能会使用到的知识点:


浅谈hibernate


width="640" height="498" src="https://v.qq.com/iframe/player.html?vid=i07281zfbnl&tiny=0&auto=0" allowfullscreen="">

【修真院java小课堂】浅谈hibernate20180719

1.背景介绍

  • 2001年,澳大利亚墨尔本一位名为Gavin King的27岁的程序员,上街买了一本SQL编程的书,他厌倦了实体bean,认为自己可以开发出一个符合 对象关系映射 理论,并且真正好用的Java持久化层框架,因此他需要先学习一下SQL。这一年的11月,Hibernate的第一个版本发布了.
  • 持久化层框架

2.知识剖析

2.1 Hibernate是什么?能做什么?

  • Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。

2.2 核心API

  • Hibernate的API一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。通过这些接口,可以对持久化对象进行存取、事务控制。

  • Session:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。

  • SessionFactory:SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
  • Transaction:Transaction 接口是一个可选的API,可以选择不使用这个接口,取而代之的是Hibernate的设计者自己写的底层事务处理代码。Transaction接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA中的UserTransaction、甚至可以是CORBA事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移植。
  • Query:Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。
  • Criteria:Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。
  • Configuration:Configuration 类的作用是对Hibernate进行配置,以及对它进行启动。在Hibernate的启动过程中,Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration类在整个Hibernate项目中只扮演着一个很小的角色,但它是启动hibernate 时所遇到的第一个对象。

3.常见问题

3.1 缓存

  • 一级缓存(session级别),缓存只停留在这个session中,如果session关闭或者其他session需要这些数据,都是不能从缓存中取出来的
  • 二级缓存(sessionFactory级别),就算某个session(第一次需要去数据库查数据的session)关闭了,仍旧不影响缓存中数据的取用
  • 一级缓存默认开启,二级缓存需要配置以及第三方支持

3.2 Session

  • Hibernate有两种方式获得session,分别是:openSession和getCurrentSession

    • 获取的是否是同一个session对象
    • 事务提交的必要性
  • 获取的是否是同一个session对象

    • openSession每次都会得到一个新的Session对象
    • getCurrentSession在同一个线程中,每次都是获取相同的Session对象,但是在不同的线程中获取的是不同的Session对象
  • 事务提交的必要性

    • openSession只有在增加,删除,修改的时候需要事务,查询时不需要的
    • getCurrentSession是所有操作都必须放在事务中进行,并且提交事务后,session就自动关闭,不能够再进行关闭

4.编码实战

  • 缓存对比
  • Session对比
  • 语句对比
  • 具体见视频

5.扩展思考

5.1 应用场景

  • 对于数据量大,性能要求高系统,不太使用hiberante。主要用于事务操作比较多的项目OA/某个行业软件(石油、税务、crm, 财务系统。)

6.参考文献

https://baike.baidu.com/item/Hibernate/206989?fr=aladdin
http://how2j.cn/k/hibernate/hibernate-tutorial/31.html


7.更多讨论

Q:Hibernate可以用的二级缓存有哪些?
A:目前了解到的有encache、redis、memcache

Q:HQL与SQL区别?
A:HQL 查询语句是面向对象的, Hibernate 负责解析 HQL 查询语句, 然后根据对象-关系映射文件中的映射信息, 把 HQL 查询语句翻译成相应的 SQL 语句。HQL 查询语句中的主体是域模型中的类及类的属性。

SQL 查询语句是与关系数据库绑定在一起的。SQL 查询语句中的主体是数据库表及表的字段。

Q:事务有什么特性?
A:比较关键的一个是原子性,是指事务包含的所有操作要么全部成功,要么全部失败回滚

PPT在这里

感谢大家观看!

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。

快来与我一起学习吧~http://www.jnshu.com/login/1/22140638

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值