Hibernate知识点

3 篇文章 0 订阅

1.什么是Hibernate

hibernate是一个基于ORM持久框架,可以让程序员以面向对象的思想操作数据库,提高生产效率.

2.什么是ORM

orm不过是一种思想,对象关系映射。是对象关系模型,让你以面向对象的方式去编程,封装了JDBC.,是一种思想

3.说一下ormjdbc的区别?

Jdbc:只是一个java操作数据库规范接口而已,是从底层访问数据库服务器。一般银行,金融行业为了安全起见,直接用JDBC访问

Orm:建立了java对象与数据库之间的映射关系,让你以面向对象的方式去编程,直接操作java对象,封装了JDBC,代码量大大减少。

4.Hibernategetload有什么不同之处?

1)如果查询不到数据,

get:会返回null,但是不会报错, 

load:会报错ObjectNotFoundException,hibernate会使用延迟加载加载机制

2)使用get去查询数据,会立即向db发出查询请求(select..),

如果你使用的是load查询数据,即使查询到对象,返回的是一个代理对象,

如果后面没有使用查询结果,它不会真的向数据库发select ,当程序员使用查

询结果的时候才真的发出select,这个现象我们称为懒加载(lazy)

5.hibernate的三种状态?

在Hibernate中,对象有三种状态:

1 时状态(Transient):new出来一个对象还没有被保存到数据库中

2持久状态(Persistent):已经被保存到数据库中

3)游离状态(Detached):数据库中有,但是session中不存在该对象

https://images0.cnblogs.com/blog/432441/201310/21101906-b68babbf49d34e1aac6599fd2a9d97ae.jpg

6.hibernate有几种查询方式?

1、属性查询  

2、参数查询、命名参数查询   

3、关联查询 

4、分页查询

5、统计函数

7.Hibernate的优缺点?

优点:

1)程序更加面向对象

2)提高了生产率

3)方便移植(修改配置文件);

4)无侵入性

缺点:

1)效率比JDBC略差

2)不适合批量操作

8.Hibernate的缓存机制

 

Hibernate的缓存机制只要有一级缓存二级缓存

一级缓存:

  1、使用一级缓存的目的是为了减少对数据库的访问次数,从而提升hibernate的执行效率;(当执行一次查询操作的时候,执行第二次查询操作,先检查缓存中是否有数据,如果有数据就不查询数据库,直接从缓存中获取数据);

  2、Hibernate中的一级缓存,也叫做session的缓存,它可以在session范围内减少数据库的访问次数,只在session范围内有效,session关闭,一级缓存失败;

  3、一级缓存的特点,只在session范围有效,作用时间短,效果不是特别明显,在短时间内多次操作数据库,效果比较明显。

  4、当调用session的save/saveOrUpdate/get/load/list/iterator方法的时候,都会把对象放入session缓存中;

  5、session的缓存是由hibernate维护的,用户不能操作缓存内容;如果想操作缓存内容,必须通过hibernate提供的evict/clear方法操作

  6、缓存相关的方法(在什么情况下使用上面方法呢?批量操作情况下使用,如Session.flush();先与数据库同步,Session.clear();再清空一级缓存内容):

    session.flush();让一级缓存与数据库同步;

    session.evict();清空一级缓存中指定的对象;

    session.clear();清空一级缓存中所有的对象;

二级缓存:

 基于应用程序级别的缓存作用在SessionFactory范围内的可以跨多个session,即不同的session都可以访问缓存。 Hibernate提供的二级缓存有默认的实现,且是一种可插配的缓存框架!如果用户想用二级缓存,只需要在hibernate.cfg.xml中配置即可; 不想用,直接移除,不影响代码。

  1、在执行各种条件查询时,如果所获得的结果集为实体对象的集合,那么就会把所有的数据对象根据ID放入到二级缓存中。

  2、当Hibernate根据ID访问数据对象的时候,首先会从Session一级缓存中查找,如果查不到并且配置了二级缓存,那么会从二级缓存中查找,如果还查不到,就会查询数据库,把结果按照ID放入到缓存中。

  3、删除、更新、增加数据的时候,同时更新缓存。

(1)缓存的范围分为3类:

    1)事务范围(单Session即一级缓存)

   事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结束.事务范围的缓存使用内存作为存储介质,一级缓存就属于事务范围.

    2)应用范围(单SessionFactory即二级缓存)

    应用程序的缓存可以被应用范围内的所有事务共享访问.缓存的生命周期依赖于应用的生命周期,只有当应用结束时,缓存的生命周期才会结束.应用范围的缓存可以使用内存硬盘作为存储介质,二级缓存就属于应用范围.

    3)集群范围(多SessionFactory)

    在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信保证缓存中的数据的一致,缓存中的数据通常采用对象的松散数据形式.

注意:

  在通常情况下会将具有以下特征的数据放入到二级缓存中:

     1)很少被修改的数据。

     2)不是很重要的数据,允许出现偶尔并发的数据。

     3)不会被并发访问的数据。

     4)常量数据。

     5)不会被第三方修改的数据

  而对于具有以下特征的数据则不适合放在二级缓存中:

     1)经常被修改的数据。

     2)财务数据,绝对不允许出现并发。

     3)与其他应用共享的数据

9.Hibernate延迟加载?有几种禁用方法?

当Hibernate在查询数据的时候数据并没有存在于内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。我们所说的懒加载也被称为延迟加载,它在查询的时候不会立刻访问数据库,而是返回代理对象,当真正去使用对象的时候才会访问数据库。

在Hibernate框架中,当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗,这时Hibernate用懒加载机制来弥补这种缺陷,但是这只是弥补而不是用了懒加载总体性能就提高了。

1.使用代理对象:Hibernate.initialize("代理对象");

2.在需要禁用懒加载的映射文件中显示的加入lazy = "false"

3.使用openSessionInView【需要借助于过滤器】 需要在web.xml文件中配置

 

10Hibernate工作原理及为什么要用?

原理:

1)读取并解析配置文件:hibernate.cfg.xml

2)读取并解析映射信息:*.hbm.xml

3)创建配置管理器:Configuration configuration = new Configuration();

4)加载配置文件:configuration.configure()

5)创建SessionFactorySessionFactory  sf=configuration.buildSessionFactory();

6)打开SesssionSession session = sf.openSession();

7)创建事务Transation

Transaction beginTransaction = session.beginTransaction();

8)提交事务:beginTransaction.commit();

9)关闭Sessionsession.close();

10)关闭SesstionFactorysf.close();

为什么要用:

1)JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

2) Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

3) hibernate使用Java反射机制,而不是字节码增强程序来实现透明性

4) hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值