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,如需转载请自行联系原作者
目录
相关文章
|
SQL Java 数据库连接
MyBatis 和 Hibernate 有什么区别?
【8月更文挑战第21天】
247 0
|
Java 数据库连接 数据库
Spring Data JPA 与 Hibernate 之区别
【8月更文挑战第21天】
336 0
|
SQL Java 数据库连接
Hibernate 和 JPA 有什么区别?
【8月更文挑战第21天】
829 0
|
SQL Java 数据库连接
|
Java 数据库连接 数据库
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
10月前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
110 1
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
155 1
|
数据库 Java 数据库连接
Struts 2 与 Hibernate 的完美邂逅:如何无缝集成两大框架,轻松玩转高效 CRUD 操作?
【8月更文挑战第31天】本文通过具体示例介绍了如何在 Struts 2 中整合 Hibernate,实现基本的 CRUD 操作。首先创建 Maven 项目并添加相关依赖,接着配置 Hibernate 并定义实体类及其映射文件。然后创建 DAO 接口及实现类处理数据库操作,再通过 Struts 2 的 Action 类处理用户请求。最后配置 `struts.xml` 文件并创建 JSP 页面展示用户列表及编辑表单。此示例展示了如何配置和使用这两个框架,使代码更加模块化和可维护。
370 0
|
SQL XML 存储
Hibernate框架【五】——基本映射——多对多映射
Hibernate框架【五】——基本映射——多对多映射
288 0