【hibernate】session中的load和get对比

引言

        凡是有相同点的知识,都要拿出来对比一下,对比着学习,收获多多哦~~~~

        Session的load和get方法都可以跟团聚指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。但是还是有区别的。


get()方法

        当调用session.get()时,首先在session缓存中查找,然后在二级缓存中查找,如果有就返回数据,没有的话直接查询数据库,数据库中如果没有就返回null,不会报错。


Load()方法

1)lazy=true

        当调用session.load()时,首先在session缓存中查找,然后在二级缓存中查找,如果查到对象,返回的是一个代理对象,如果后面没有使用查询结果,就不会像数据库发起查询。只有使用查询结果才会真正的向数据库发出查询,我们称之为懒加载(lazy)。XXX.hbm.xml文件中默认配置lazy=”true”。如果没有查到数据会抛出ObjectNotFoundException异常。


2)lazy=false

       若配置文件中lazy=”false”,那load()方法的查询顺序和get()方法一样,但是当没有查到数据的时候还是会发出ObjectNotFoundException异常。


Demo

1)get

User user =(User)session.get(User.class, 1);

        立即去执行数据库查询。 

        当没有查到数据的时候,返回null



2)load

//不会发出sql
	User user =(User)session.load(User.class, 1);


          不会立即执行数据库查询

 

//不会发出sql
	System.out.println("user.id="+user.getId());

  因为执行过load方法之后会在hibernate的一级缓存里放一个map对象,该map对象的key就是userId的值,所以当执行getId()时,就会去一级缓存里拿map的key值,而不去执行数据库查询,所以不报错,不执行数据库操作。

//会发出sql
	System.out.println("user.name="+ user.getName());

        缓存中没有,执行了数据库操作。

        当没有查到数据的时候,返回ObjectNotFoundException异常。



总结

           get()不支持懒加载,load支持懒加载!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
HibernateSession是一个重要的接口,它代表了应用程序与数据库之间的一次会话。Session对象提供了对数据库的CRUD操作,包括添加、查询、更新、删除等操作。 Session的作用主要有以下几点: 1. 提供CRUD操作:Session对象提供了对数据库的CRUD操作,可以通过Session对象进行数据的添加、查询、更新、删除等操作。 2. 数据库事务管理:Session对象提供了事务管理的功能,可以通过Session.beginTransaction()方法开始事务,Session.getTransaction().commit()方法提交事务,Session.getTransaction().rollback()方法回滚事务。 3. 缓存管理:Hibernate提供了一级缓存和二级缓存,Session对象可以管理一级缓存,提高查询性能。 4. 对象状态管理:Session对象可以管理Java对象的状态,包括脱管状态、持久状态和游离状态等,可以通过Session.save()方法将对象从脱管状态转换为持久状态,通过Session.evict()方法将对象从持久状态转换为游离状态等。 5. 延迟加载:Hibernate支持延迟加载,可以通过Session.get()方法或Session.load()方法进行延迟加载,减少数据库的访问次数。 总之,SessionHibernate框架的一个重要接口,它提供了对数据库的CRUD操作、事务管理、缓存管理、对象状态管理和延迟加载等功能。Session的使用可以方便地进行数据库操作,提高了开发效率和代码可维护性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值