什么是Hibernate?

java小课堂

分享人:许东杰

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

1.背景介绍

hibernate:是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库

hibernate和mybatis的区别:

1、hibernate中基本的sql语句已经被封装好了,不需要你去写sql语句,可以节省了大量的时间

2、针对高级查询,Mybatis需要编写SQL语句,以及ResultMap,hibernate只需要写sql语句,自动返回映射结果

3、Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗,但Hibernate也可以自己写SQL来指定需要查询的字段

2.知识剖析

Hibernate有两种方式获得session:

openSession和getCurrentSession

区别:

1. 获取的是否是同一个session对象:

openSession每次都会得到一个新的Session对象

getCurrentSession在同一个线程中,每次都是获取相同的Session对象,但是在不同的线程中获取的是不同的Session对象(需要在配置文件中额外配置)

2. 事务提交的必要性:

openSession只有在增加,删除,修改的时候需要事务,查询时不需要的

getCurrentSession是所有操作都必须放在事务中进行,并且提交事务后,session就自动关闭,不能够再进行关闭

3.常见问题


怎么避免脏读?

4.解决方案


使用乐观锁来避免脏读

1、在实体类中加入一个version的版本属性

2、更新该类的xml文件,加入版本控制的配置属性

运行原理:当session1获取该类实例的时候,version=1。 那么session1更新该类实例的时候,就需要确保version还是1才可以进行更新,并且更新结束后,把version改为2,如果在session1提交时发现version已经被其他的session更改为2,则提交失败

5.编码实战

hibernate增删改查

hibernate与spring及springmvc的整合

6.扩展思考

Hibernate的事物管理

1、单独hibernate框架中的操作:

在Hibernate中我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据操作,然后提交事务,关闭事务

2、和spring整合之后就由Spring为Hibernate提供事务管理机制

Spring提供的事务管理可以分为两类:编程式的和声明式的,编程式,其实就是在代码里面来控制,像Hibernate操作数据一样,开启事务,提交事务,这种方式有一定的局限性,所以我们一般是用声明式来配置我们的事务

7.参考文献


百度、谷歌

鸣谢

感谢观看,如有出错,恳请指正

BY :许东杰