Hibernate 中get()和load()的区别

1 篇文章 0 订阅
1 篇文章 0 订阅

开发中,我们往往也会用到Hibernate中的  get() 和 load() , 他们都是查询方法。那么现在小编就来说说其中的区别吧!

例子:

假如数据库中有个Student ID=1,username="zhangsan"

那么我们在使用get()方法的时候有几点

Student stu = session.get(Student.class, 1);

stu.getUsername();

这个时候我们打印一下System.out.print(stu)类,

第一:你会发现,得到的是我们的实体类。

第二:它是一个立即加载的机制,就是马上会去数据库中进行加载,当前的SQL也会查询出来。

第三:Student stu = session.get(Student.class, 111); 我们可以看到查询ID为111的时候,数据库中没有,System.out.print(stu)的时候,他得到的结果为null。

 

 

例子2:

假如数据库中有个Student ID=1,username="zhangsan"

那么我们在使用load()方法的时候有几点

Student stu = session.load(Student.class, 1);

这个时候我们打印一下System.out.print(stu)类

 第一:你会发现他是一个代理的类。

第二: 当我们采用 stu.getId()的时候,我们会发现,他没有去查询,不会发送SQL语句,因为我们在Student stu = session.load(Student.class, 1);操作的时候,已经查询的就是他的一个ID为1,所以他不会去查询数据库。我们可以理解为他只有一个ID为1的代理对象。但是当我们stu.getUsername()的时候。他就会去法SQL查找。

第三:当我们查询一个ID在数据库中没有的数据时,他会报错。在Hibernate的配置文件中,一般来说class中的lazy属性为true

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值