您现在的位置是: 首页 >  个人博客日记 >  Hibernate常见的加载方式(get和load的区别真没那么难) 博客详情

Hibernate常见的加载方式(get和load的区别真没那么难)

请叫我菜鸟 2019-07-03 12:39 【Hibernate框架】 314次预览

简介hibernate框架作为一个优秀的orm框架,通常情况下我们使用hibernate从数据库中获取一个对象,无非就是通过session.get()方法或者通过session.load()方法,但是这两种方法在获得一个实体对象时是有区别的,在查询性能上...

hibernate框架作为一个优秀的orm框架,通常情况下我们使用hibernate从数据库中获取一个对象,无非就是通过session.get()方法或者通过session.load()方法,但是这两种方法在获得一个实体对象时是有区别的,在查询性能上两者是不同的。

1、load加载方式(懒加载)

当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,换句话说党我们使用session.load()方法来加载一个对象时,此时控制台并不会发出sql语句,而是得到一个代理对象,这个代理对象只保存了实体对象的id值,只有当我们要通过该代理对象去获取实际对象的其它属性时,这个时候才会发出sql语句,从数据库中去查询我们的对象。

案例分析:

session = HibernateUtil.openSession();
User user = (User)session.load(User.class, 1);
System.out.println(user);

分析结果:当我们执行到第二行代码时,控制台并不会输出对应的sql查询语句,此时会生成一个代理对象来保存实体对象的id值,然后当执行到第三行代码后,才会输出sql查询语句。如果把输出语句换成如下代码,在控制台仍然不会输出sql语句。

System.out.println(user.getId());

注意:通过load()方法获取实体对象,只有需要实体对象的其它属性(即非Id属性),才会输出sql语句。


2、get加载方式(立即加载)

当我们使用session.get()方法来得到一个对象时,不管我们使不使用这个对象,此时都会发出sql语句去从数据库中查询出来。

案例分析:

session = HibernateUtil.openSession();
User user = (User)session.load(User.class, 1);
System.out.println(user);

分析结果:当我们执行到第二行代码后,控制台则会立即输出相应的sql查询语句。


3、两者的异常区别

使用load()方法去获取数据库中某条不存的记录,则会发生ObjectNotFoundException异常,而使用get()方法则会发生NullPointException的异常。

加入我们

  • Java学习资源网官方群1

    群号:280998807(已满)

  • Java学习资源网官方群2

    群号:291195645

  • Java学习资源网官方群3

    群号:691628026

打赏本站

  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!
  • 微信扫码:你说多少就多少~
  • 支付宝扫码:你说多少就多少~