Hibernate之查询中get()和load()的区别,list()和iterate()的区别

简介:

list()查询

1
2
3
4
5
6
7
8
9
10
11
//一次性把数据对象取出来
     @Test
     public  void  findTestList(){
         Session s=sessionFactory.getCurrentSession();
         s.beginTransaction();
         List<Person> persons=s.createQuery( "from Person" ).list();
         for (Person person:persons){
             System.out.println(person.getName()+ "----" +person.getId());
         }
         s.getTransaction().commit();
     }

sql语句如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
16:00:43,118 DEBUG SQL:111 - 
     select
         person0_.id  as  id1_,
         person0_.p_age  as  p2_1_,
         person0_.group_id  as  group4_1_,
         person0_.p_name  as  p3_1_ 
     from
         p_person person0_
张三0 ----1
张三1 ----2
张三2 ----3
张三3 ----4
张三4 ----5
张三5 ----6
张三6 ----7
张三7 ----8
张三8 ----9
张三9 ----10


iterate()查询


1
2
3
4
5
6
7
8
9
10
11
12
13
//一次性取出来的是所有对象的主键值,并且会把这些主键值放在Session缓冲中去
     //下次需要的话,直接在Session中获取,不需要再次访问数据库
     //缺点是将查询出来的主键值,分别再以主键进行取值对象,造成数据库压力巨大
     @Test
     public  void  findTestIterate(){
         Session s=sessionFactory.getCurrentSession();
         s.beginTransaction();
         Iterator<Person> persons=s.createQuery( "from Person" ).iterate();
         while (persons.hasNext()){
             System.out.println(persons.next().getName());
         }
         s.getTransaction().commit();
     }


sql语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
16:03:55,776 DEBUG SQL:111 - 
     select
         person0_.id  as  col_0_0_ 
     from
         p_person person0_
16:03:55,806 DEBUG SQL:111 - 
     select
         person0_.id  as  id1_0_,
         person0_.p_age  as  p2_1_0_,
         person0_.group_id  as  group4_1_0_,
         person0_.p_name  as  p3_1_0_ 
     from
         p_person person0_ 
     where
         person0_.id=?
张三0
16:03:55,823 DEBUG SQL:111 - 
     select
         person0_.id  as  id1_0_,
         person0_.p_age  as  p2_1_0_,
         person0_.group_id  as  group4_1_0_,
         person0_.p_name  as  p3_1_0_ 
     from
         p_person person0_ 
     where
         person0_.id=?
张三1
16:03:55,826 DEBUG SQL:111 - 
     select
         person0_.id  as  id1_0_,
         person0_.p_age  as  p2_1_0_,
         person0_.group_id  as  group4_1_0_,
         person0_.p_name  as  p3_1_0_ 
     from
         p_person person0_ 
     where
         person0_.id=?
张三2
16:03:55,832 DEBUG SQL:111 - 
     select
         person0_.id  as  id1_0_,
         person0_.p_age  as  p2_1_0_,
         person0_.group_id  as  group4_1_0_,
         person0_.p_name  as  p3_1_0_ 
     from
         p_person person0_ 
     where
         person0_.id=?
张三3
16:03:55,836 DEBUG SQL:111 - 
     select
         person0_.id  as  id1_0_,
         person0_.p_age  as  p2_1_0_,
         person0_.group_id  as  group4_1_0_,
         person0_.p_name  as  p3_1_0_ 
     from
         p_person person0_ 
     where
         person0_.id=?
张三4
16:03:55,838 DEBUG SQL:111 - 
     select
         person0_.id  as  id1_0_,
         person0_.p_age  as  p2_1_0_,
         person0_.group_id  as  group4_1_0_,
         person0_.p_name  as  p3_1_0_ 
     from
         p_person person0_ 
     where
         person0_.id=?
张三5
16:03:55,841 DEBUG SQL:111 - 
     select
         person0_.id  as  id1_0_,
         person0_.p_age  as  p2_1_0_,
         person0_.group_id  as  group4_1_0_,
         person0_.p_name  as  p3_1_0_ 
     from
         p_person person0_ 
     where
         person0_.id=?
张三6
16:03:55,844 DEBUG SQL:111 - 
     select
         person0_.id  as  id1_0_,
         person0_.p_age  as  p2_1_0_,
         person0_.group_id  as  group4_1_0_,
         person0_.p_name  as  p3_1_0_ 
     from
         p_person person0_ 
     where
         person0_.id=?
张三7
16:03:55,846 DEBUG SQL:111 - 
     select
         person0_.id  as  id1_0_,
         person0_.p_age  as  p2_1_0_,
         person0_.group_id  as  group4_1_0_,
         person0_.p_name  as  p3_1_0_ 
     from
         p_person person0_ 
     where
         person0_.id=?
张三8
16:03:55,875 DEBUG SQL:111 - 
     select
         person0_.id  as  id1_0_,
         person0_.p_age  as  p2_1_0_,
         person0_.group_id  as  group4_1_0_,
         person0_.p_name  as  p3_1_0_ 
     from
         p_person person0_ 
     where
         person0_.id=?
张三9


get()查询

1
2
3
4
5
6
7
8
9
//立刻发送sql语句,不管我们是否需要,比如person.getName();
     @Test
     public  void  findTestget(){
         Session s=sessionFactory.getCurrentSession();
         s.beginTransaction();
         Person person=(Person)s.get(Person. class 1 );
//      System.out.println(person.getName());
         s.getTransaction().commit();
     }


load()查询

1
2
3
4
5
6
7
8
9
//不会立刻发送sql语句,只有当我们需要的时候才会发送sql语句,比如person.getName();
     @Test
     public  void  findTestload(){
         Session s=sessionFactory.getCurrentSession();
         s.beginTransaction();
         Person person=(Person)s.load(Person. class 1 );
//      System.out.println(person.getName());
         s.getTransaction().commit();
     }










本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1576128,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
120 0
|
3月前
|
SQL Java 数据库连接
MyBatis 和 Hibernate 有什么区别?
【8月更文挑战第21天】
65 0
|
3月前
|
Java 数据库连接 数据库
Spring Data JPA 与 Hibernate 之区别
【8月更文挑战第21天】
83 0
|
3月前
|
SQL Java 数据库连接
Hibernate 和 JPA 有什么区别?
【8月更文挑战第21天】
228 0
|
3月前
|
SQL Java 数据库连接
|
3月前
|
缓存 Java 数据库连接
什么是 Hibernate 查询语言或 HQL?
【8月更文挑战第21天】
113 0
|
3月前
|
SQL Java 数据库连接
在 Hibernate 中何时使用条件查询?
【8月更文挑战第21天】
42 0
|
5月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
907 1
|
4月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
4月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。