一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Hibernate迫切連接和普通連接的區(qū)別實(shí)例詳解

Hibernate迫切連接和普通連接的區(qū)別實(shí)例詳解

2021-03-10 13:29__浮沉丶若軒◇ Java教程

這篇文章主要介紹了Hibernate迫切連接和普通連接的區(qū)別實(shí)例詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。

Hibernate 迫切連接和普通連接的區(qū)別

相關(guān)的介紹和解釋在代碼中已注釋,大家可以參考。

?
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package com.baidu.test;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.baidu.leftJoin.Department;
import com.baidu.leftJoin.Employee;
public class TestHQL_LeftJoin {
    private SessionFactory sessionFactory;
    private Session session;
    private Transaction transaction;
    @Before
      public void init(){
        Configuration configuration = new Configuration().configure();
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                            .applySettings(configuration.getProperties())
                            .buildServiceRegistry();
        sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        session = sessionFactory.openSession();
        transaction = session.beginTransaction();
    }
    @After
      public void destroy(){
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~下面的例子是 從 1 對(duì) 多  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /**
   *
   * 迫切左外連接: 特點(diǎn)是:如果左表有不滿足條件的,也返回左表不滿足條件
   *    1. LEFT JOIN FETCH 關(guān)鍵字表示迫切左外連接檢索策略.
   *    2. list() 方法返回的集合中存放實(shí)體對(duì)象的引用, 每個(gè) Department 對(duì)象關(guān)聯(lián)的 Employee 集合都被初始化,
   *       存放所有關(guān)聯(lián)的 Employee 的實(shí)體對(duì)象.
   *    3. 查詢結(jié)果中可能會(huì)包含重復(fù)元素, 可以通過一個(gè) HashSet 來過濾重復(fù)元素
   *
   *     去重:
   *       方法一:使用 distinct
   *         String hql = "SELECT DISTINCT d FROM Department d LEFT JOIN FETCH d.emps ";
   *        Query query = session.createQuery(hql);
   *
   *        List<Department> depts = query.list();
   *        System.out.println(depts.size());
   *      
   *       方法二
   *         String hql = "FROM Department d LEFT JOIN FETCH d.emps ";
   *        Query query = session.createQuery(hql);
   *
   *        List<Department> depts = query.list();
   *
   *        depts = new ArrayList<>(new LinkedHashSet(depts));
   *        System.out.println(depts.size());
   *       
   *        for(Department dept:depts){
   *          System.out.println(dept.getName() + "--" + dept.getEmps().size() );
   *        }
   *
   *
   */
    @Test
      public void testLeftJoinFetch(){
        //    String hql = "SELECT DISTINCT d FROM Department d LEFT JOIN FETCH d.emps ";
        //    Query query = session.createQuery(hql);
        //   
        //    List<Department> depts = query.list();
        //    System.out.println(depts.size());
        //   
        String hql = "FROM Department d LEFT JOIN FETCH d.emps ";
        Query query = session.createQuery(hql);
        List<Department> depts = query.list();
        System.out.println(depts.size());
        depts = new ArrayList<>(new LinkedHashSet(depts));
        System.out.println(depts.size());
        for (Department dept:depts){
            System.out.println(dept.getName() + "--" + dept.getEmps().size() );
        }
    }
    /**
   * 左外連接:
   *    1. LEFT JOIN 關(guān)鍵字表示左外連接查詢.
   *    2. list() 方法返回的集合中存放的是對(duì)象數(shù)組類型
   *    3. 根據(jù)配置文件來決定 Employee 集合的檢索策略.
   *    4. 如果希望 list() 方法返回的集合中僅包含 Department 對(duì)象,
   *      可以在HQL 查詢語(yǔ)句中使用 SELECT 關(guān)鍵字
   *   
   *    這樣的語(yǔ)句查詢的結(jié)果有重復(fù):
   *      String hql = "FROM Department d LEFT JOIN d.emps";
   *      Query query = session.createQuery(hql);
   *   
   *      List<Object[]> results = query.list();
   *      System.out.println(results.size());
   
   *     去重:
   *       僅能使用 distinct 的方法去除重復(fù)
   *  
   *       String hql = "SELECT DISTINCT d FROM Department d LEFT JOIN d.emps";
   *       Query query = session.createQuery(hql);
   *
   *       List<Department> depts = query.list();
   *       System.out.println(depts.size());
   *        
   *       for(Department dept:depts){
   *         System.out.println(dept.getName() + dept.getEmps().size());
   *       }
   *
   */
    @Test
      public void testLeftJoin(){
        String hql = "SELECT DISTINCT d FROM Department d LEFT JOIN d.emps";
        Query query = session.createQuery(hql);
        List<Department> depts = query.list();
        System.out.println(depts.size());
        for (Department dept:depts){
            System.out.println(dept.getName() + dept.getEmps().size());
        }
    }
    /**
   * 迫切內(nèi)連接: 特點(diǎn)是:不返回左表不滿足條件
   *    INNER JOIN FETCH 關(guān)鍵字表示迫切內(nèi)連接, 也可以省略 INNER 關(guān)鍵字
   *    list() 方法返回的集合中存放 Department 對(duì)象的引用, 每個(gè) Department
   *        對(duì)象的 Employee 集合都被初始化, 存放所有關(guān)聯(lián)的 Employee 對(duì)象
   *
   * 內(nèi)連接:
   *    INNER JOIN 關(guān)鍵字表示內(nèi)連接, 也可以省略 INNER 關(guān)鍵字
   *    list() 方法的集合中存放的每個(gè)元素對(duì)應(yīng)查詢結(jié)果的一條記錄, 每個(gè)元素都是對(duì)象數(shù)組類型
   *    如果希望 list() 方法的返回的集合僅包含 Department 對(duì)象, 可以在 HQL 查詢語(yǔ)句中使用 SELECT 關(guān)鍵字
   *
   *
   *
   */
    @Test
      public void testInnerJoinFetch(){
        //String hql = "SELECT DISTINCT d FROM Department d LEFT JOIN FETCH d.emps ";
        String hql = "FROM Department d INNER JOIN FETCH d.emps ";
        Query query = session.createQuery(hql);
        List<Department> depts = query.list();
        depts = new ArrayList<>(new LinkedHashSet(depts));
        System.out.println(depts.size());
        for (Department dept:depts){
            System.out.println(dept.getName() + "--" + dept.getEmps().size() );
        }
    }
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~下面的例子是 從多 對(duì) 1  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    @Test
      public void testLeftJoinFetch2(){
        String hql = "FROM Employee e LEFT JOIN FETCH e.dept";
        Query query = session.createQuery(hql);
        List<Employee> emps = query.list();
        System.out.println(emps.size());
        for (Employee emp:emps){
            System.out.println(emp + " -- " + emp.getDept());
        }
    }
}

總結(jié)

以上就是本文關(guān)于Hibernate迫切連接和普通連接的區(qū)別實(shí)例詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

原文鏈接:https://www.cnblogs.com/songjianhui/p/6505122.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91tm视频 | 色中文| 特黄特黄一级片 | 欧美日本道免费一区二区三区 | 精品国产理论在线观看不卡 | 国产精品国产香蕉在线观看网 | 按摩师他揉我奶好爽捏我奶 | 欧美在线视频一区 | 日韩在线一区二区 | 2020国语对白露脸 | tobu8中国在线观看免费视频 | 国产一卡2卡3卡四卡国色天香 | 国色天香 社区视频 | 大学生情侣在线 | xxx中国bbbwww| 免费一级欧美片在线观看 | 欧美影院一区二区 | 久久AV国产麻豆HD真实乱 | 高清国产激情视频在线观看 | 无码人妻丰满熟妇啪啪网不卡 | 污小说免费 | 欧美香蕉人人人人人人爱 | 国产福利在线免费观看 | 毛片在线免费观看网站 | jazz欧美人免费xxxxxx | 日朝欧美亚洲精品 | 精品国产日韩一区三区 | 被肉日常np高h| 色漫在线观看 | 4399h漫画 | 日本成人免费在线视频 | 大好硬好深好爽想要视频 | 亚洲国产综合自在线另类 | 日韩欧美一卡二区 | 96av视频在线观看 | 国产成人v爽在线免播放观看 | 99福利网| 狠狠色综合久久婷婷色天使 | 美国女艳星brandilove | 四虎在线最新地址公告 | xxx88视频在线观看 |