1. 程式人生 > >Hibernate的查詢方式知多少 二

Hibernate的查詢方式知多少 二

上篇部落格,我們繼續說Hibernate的後邊幾個查詢方式。

四、DetachedCriteria

這種查詢叫做動態分離查詢。即,業務和DAO實現分離的一種方式,查詢條件是需求,千變萬化,但是實現很簡單,繫結條件後,只要使用一個list方法就傳送了請求,所以我們可以把查詢條件從實現的程式碼中分離出來。業務邏輯和訪問資料庫的實現分離,需要的時候,再結合,體現的是鬆耦合的思想。
看程式碼示例:

// 底層實現
static List accessDB(DetachedCriteria dc) {
   Session s = HibernateUtil.getSession();
   Criteria c =
dc.getExecutableCriteria(s); List rs = c.list(); s.close(); return rs; } // 業務 DetachedCriteria dc = DetachedCriteria.forClass(User.class); int id = 1; if (id != 0) dc.add(Restrictions.eq("id", id)); Date age = new Date(); if (age != null) dc.add(Restrictions.le("birthday"
, age)); List users = accessDB(dc); System.out.println("離線查詢返回結果:" + users);

上例中,第一個方法是資料庫訪問的程式碼,第二個方法是 業務查詢的定義,在其他中,將DetachedCriteria定義好後,呼叫了執行資料庫訪問的操作:List users = accessDB(dc)。

適用情況:

  • 面向物件操作,

  • 分離業務與底層,

  • 不需要欄位屬性攝入到Dao實現層。

缺點:

  • 同Criteria一樣,適用面較HQL有限。

    五、命名查詢

有點像ibatis輕量級框架的操作,具體的實現是把查詢語句從java類中轉移到了hbm配置檔案中。在配置檔案中,通過標籤來定義查詢語句。
看如下示例程式碼:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
     <class name="com.sy.vo.User" table="user" catalog="news"> 
     </class>
     <!-- 命名查詢:定義查詢條件 -->
     <query name="getUserById">
      <![CDATA[from User where id=:id]]>
     </query>
     <!-- 命名查詢中使用sql,不推薦使用,影響跨資料庫
    <sql-query name="getUserById2">
      <![CDATA[select * from User where ]]>
     </sql-query> -->
</hibernate-mapping>

讀取配置檔案的程式碼:

static List namedQuery(int id) {
   Session s = HibernateUtil.getSession();
   Query q = s.getNamedQuery("getUserById");
   q.setInteger("id", id);
   return q.list();
  }

PS: 配置檔案中的query的name一定要和 java中要拿的 名字對應上。
如圖:這裡寫圖片描述

優點:

  • 方便維護。
    將查詢語句,寫到xml中,後期改動方便,不用重現編譯,釋出系統。

缺點:

  • 比起Criteria來說,不面向物件。

總結:

各種查詢方式有各自的優勢,系統中使用的時候,也不是隻能使用一種,我們要會在合適的時候使用的合適的查詢方式,來達到我們實現需求的目的。

相關推薦

Hibernate查詢方式多少

繼上篇部落格,我們繼續說Hibernate的後邊幾個查詢方式。 四、DetachedCriteria 這種查詢叫做動態分離查詢。即,業務和DAO實現分離的一種方式,查詢條件是需求,千變萬化,但是實現很簡單,繫結條件後,只要使用一個list方法就傳送了請求,所

Hibernate學習10——Hibernate 查詢方式

9.png property ice pub gets reat sed desc ring 本章主要是以查詢Student的例子: Student.java: package com.cy.model; public class Student { priv

Hibernate框架之路(四)hibernate查詢方式

集合 commit void div 第一個 -- cto 下標 action OID查詢 /** * OID 查詢 * 根據ID查詢 * 一對多查詢 */ @Test public void

hibernate查詢方式查詢策略

創建 檢索策略 聯系人 多表 左外連接 基本上 如果 唯一標識 情況 1.Hibernate框架的查詢方式 1) 唯一標識OID的檢索方式 * session.get(對象.class,OID) 2) 對象的導航的方式 3) HQL的

Hibernate查詢方式(補)

sof qbc nbsp ros ron 客戶 多對多 它的 記錄 -----------------siwuxie095 Hibernate 查詢方式 1、對象導航查詢 根據已經加載的對象,導航到它的

Hibernate查詢方式與抓取策略(優化)

4. Hibernate查詢方式與抓取策略(優化) 申明:本篇部落格引用黑馬教育;Hibernate其他系列為博主根據黑馬教育整理得到。 上接Hibernate關聯對映(一對多/多對多):https://blog.csdn.net/biggerchong/article/details/

Hibernate查詢方式&抓取策略

Hibernate的查詢方式 1、OID查詢 hibernate根據物件的OID(主鍵)進行檢索   使用get方法 Customer customer=session.get(Customer.class,1l);   使用load方法 Customer customer=s

Hibernate查詢方式、物件導航查詢、OID查詢、HQL查詢、QBC、元素SQL

-》物件導航查詢         通過企業Id,查詢到企業,然後根據這個企業查詢所有的員工 測試類: package test; import java.util.Iterator; import java.util.List; import junit.fram

Hibernate查詢方式之:HQL查詢(需要使用的類是:Query)

hibernate查詢方式之:HQL查詢方式: HQL語句正對的是實體類的名稱和實體類的屬性進行操作 1.查詢所有 格式:from 實體類名稱 Query query = session.createQuery("from User"); List<User&

Hibernate學習筆記(五)—— Hibernate查詢方式

一、物件圖導航查詢   物件圖導航查詢方式是根據已經載入的物件,導航到他的關聯物件。它利用類與類之間的關係來查詢物件。比如要查詢一個聯絡人對應的客戶,就可以由聯絡人物件自動導航找到聯絡人所屬的客戶物件。當然,前提是必須在物件關係對映檔案上配置了多對一的關係。其檢索方式如下所示: LinkMan li

JDBC 資料庫的幾種查詢方式

1.資料庫中的查詢jdbc.queryForObject( )和jdbc.query( );我的理解就是一個返回的物件,一個返回集合(集合可能不貼切) String sql = "select username from user where username

ssh框架hibernate 查詢方式查詢功能優化

Hibernate框架的查詢方式* 1. 唯一標識OID的檢索方式 * session.get(物件.class,OID) 2. 物件的導航的方式 3. HQL的檢索方式 * Hibernate Query Language -- Hibe

hibernate查詢方式及抓取策略

查詢方式       根據唯一標識id進行檢索:                   get與load方法(https://blog.csdn.net/qq_4060591

Hibernate第四天:Hibernate查詢方式、抓取策略

 目錄 1Hibernate的查詢的方式 1.1Hibernate的查詢方式:OID查詢 1.1.1使用get方法 1.1.2使用load方法 1.2Hibernate的查詢方式:物件導航檢索 1.3Hibernate的查詢方式:HQL檢索 1.3.1初始化一些

九、Hibernate的多種查詢方式

一、唯一標識OID的檢索方式 這種方式是通過主鍵來查詢的,呼叫方式如session.get(物件.class,OID),適用於獲取單條資料. 二、HQL的檢索方式 什麼是HQL HQL(Hibernate Query Language) 是面向物件的查詢語言, 它和 SQL

Hibernate學習——查詢方式(HQL、Criteria、SQL)

Hibernate框架的批量查詢有三種實現方式: HQL Criteria SQL 這三種方式無論過程有什麼不同,最終結果都是通過sql語句實現查詢操作。   HQL是Hibernate框架封裝好的一種查詢語言 基本操作:

Hibernate框架的查詢方式

1. 唯一標識OID的檢索方式 * session.get(物件.class,OID) 2. 物件的導航的方式 3. HQL的檢索方式 * Hibernate Query Language        -- Hibernate的查詢語言 4. QBC的檢索方式

Hibernate框架查詢方式之QBC查詢

QBC(Query By Criteria)檢索方式 簡單查詢,使用的是Criteria介面 List<Customer> list = session.createCriteria(Customer.class).list(); for(Customer custo

hibernate的三種查詢方式

一、HQL查詢 • HQL(Hibernate Query Language)提供了豐富靈活的查詢方式,使用HQL進行查詢也是Hibernate官方推薦使用的查詢方式。 • HQL在語法結構上和SQL語句十分的相同,所以可以很快的上手進行使用。使用HQL需要用到Hibernate中的Query物件,該

Hibernate查詢資料的五種方式

1.導航物件圖查詢:根據已經載入的物件,導航到其他物件。 例如,對於已經載入的Customer物件,呼叫它getOrders().iterator()方法就可以導航到所有關聯的Order物件,假如在關聯級別使用了延遲載入檢索策略,那麼首次執行此方法時,Hibernate