开发中,我们往往也会用到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