博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate-ORM:04.Hibernate中的get()和load()
阅读量:7058 次
发布时间:2019-06-28

本文共 4215 字,大约阅读时间需要 14 分钟。

 

 

 

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

 

 

 

本篇博客会讲如何用get()或load()查询单个对象和对缓存的简单操作,以及他俩的区别和相同(前面有的那些配置不做重复展示,见谅)

 

Hibernate中查询单个,就是用get()或load()任意一个做操作即可!

我会讲明区别和相同的地方,再加上一些验证我说的区别和相同的实例:

 

一,查询单个

  1.使用get()查询单个

 

@Test    /*get他是直接加载*/    public void t4GetDemo01(){        System.out.println("----------------------------------");        Teacher teacher = session.get(Teacher.class, 1);        System.out.println("----------------------------------");        System.out.println(teacher.getName());    }

 

  2.使用load()查询单个

 

@Test    /*load他是懒加载*/    public void t5LoadDemo01(){        System.out.println("----------------------------------");        Teacher teacher = session.load(Teacher.class, 1);        System.out.println("----------------------------------");        System.out.println(teacher.getName());    }

 

 

 

二,相同处

  1.get()和load()都使用缓存,他们查找记录的策咯是,先找一级缓存,有就拿来用,没有再去找二级,二级还没有就找数据库

  (验证规则:同样的查俩次,看看发几次sql不就好了么!)

 

/*get查记录从一级缓存开始找,一级没找到去二级找,二级没找到去数据库,数据库没找到返回null*/    @Test    /*测试get缓存1*/    /*从他只发一条sql就知道他走的有缓存,因为二级缓存没有配置,所以,是一级缓存*/    public void t6GetCacheDemo01(){        System.out.println("----------------------------------");        Teacher teacher1 = session.get(Teacher.class, 1);        Teacher teacher2 = session.get(Teacher.class, 1);        System.out.println("----------------------------------");    }

 

  2.他俩使用基本相似,传的同样俩个参数,返回值也一样

 

三,区别

  1.get()是直接加载,load是懒加载(又称延迟加载)

  (验证:)

 

/*get和load都是查询,区别:*/    @Test    /*get他是直接加载*/    public void t4GetDemo01(){        System.out.println("----------------------------------");        Teacher teacher = session.get(Teacher.class, 1);        System.out.println("----------------------------------");        System.out.println(teacher.getName());    }    @Test    /*load他是懒加载*/    public void t5LoadDemo01(){        System.out.println("----------------------------------");        Teacher teacher = session.load(Teacher.class, 1);        System.out.println("----------------------------------");        System.out.println(teacher.getName());    }    /*测试在有懒加载的时候不使用它查不查数据*/    public void t12LoadLazyTrueDemo02(){        Teacher teacher = session.load(Teacher.class, 1);        System.out.println("----------------------------------");    }

 

  2.查询一个没有的记录get()返回的是null,load()则会引发异常ObjectNotFoundException

 

@Test    /*测试get获取一个没有的值*/    public void t9GetHaventDemo01(){        Teacher teacher = session.get(Teacher.class, 5);        System.out.println("----------------------------------");        System.out.println(teacher);    }    @Test    /*测试load获取一个没有的值,会抛ObjectNotFoundException*/    public void t10LoadHaventDemo01(){        Teacher teacher = session.load(Teacher.class, 5);        System.out.println("----------------------------------");        System.out.println(teacher);    }

 

 

四,操作一级缓存查看对get()和load()的影响清除单个缓存,和全部缓存

 

@Test    /*清除单个缓存*/    public void t7GetCacheDemo02(){        System.out.println("----------------------------------");        Teacher teacher1 = session.get(Teacher.class, 1);        Teacher teacher2 = session.get(Teacher.class, 2);        System.out.println("----------------------------------");        session.evict(teacher1);        teacher1= session.get(Teacher.class, 1);    }    @Test    /*清除全部缓存*/    public void t8GetCacheDemo03(){        System.out.println("----------------------------------");        Teacher teacher1 = session.get(Teacher.class, 1);        Teacher teacher2 = session.get(Teacher.class, 2);        System.out.println("----------------------------------");        session.clear();        teacher1= session.get(Teacher.class, 1);        teacher2 = session.get(Teacher.class, 2);    }

 

  结论:get()和load()确实使用到了缓存,如果缓存被清除,他们就得再发sql到数据库去查

 

五,load()也可以直接加载

  方案:

  在**.hbm.xml小配置文件中,配置延迟加载lazy=false

 

 

  测试:

 

@Test    /*测试在没有懒加载的时候不使用它查不查数据*/    public void t12LoadLazyTrueDemo02(){        Teacher teacher = session.load(Teacher.class, 1);        System.out.println("----------------------------------");    }

 

 

 

 

作者:晨曦Dawn

转载请注明出处,博客地址

如果有错误,请指出,感激不尽!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

你可能感兴趣的文章
HashMap源码分析
查看>>
j抽奖
查看>>
[算法] dijkstra单源无负权最小路径算法
查看>>
第一阶段:前端开发_MySql——外键介绍
查看>>
字符串的全排列
查看>>
Java并发编程的艺术(十)——Java中的锁(5)
查看>>
mysql实战39 | 自增主键为什么不是连续的?
查看>>
软件架构师的修炼之道
查看>>
[HDU 1372] Knight Moves
查看>>
java代码实现 金字塔(倒置)
查看>>
NOIP2015DAY2T2子串
查看>>
5种PHP创建数组的方式
查看>>
24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
查看>>
【C语言】07-基本语句和运算
查看>>
ajax异步获取提示框数据(鼠标悬浮事件)
查看>>
Android 内存使用hprof文件打开方法
查看>>
android入门一
查看>>
第16条:复合优先于继承
查看>>
[学习笔记]斯特林数
查看>>
oracle 修改表空间文件路径方法
查看>>