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