Hibernate框架學習筆記——04

Hibernate查詢方式

  • 對象導航查詢
    ----根據id查詢某個客戶,再查詢這個客戶裏面所有的聯繫人

  • OID查詢
    ----根據id查詢某一條記錄,返回對象

  • HQL查詢
    ----Query對象,寫hql語句實現查詢

  • QBC查詢
    ----Criteria對象

  • 本地sql查詢
    ----SQLQuery對象,使用普通sql實現查詢

1.對象導航查詢

例:查詢某個客戶裏面所有聯繫人(一對多)過程,使用對象導航實現

//根據cid=1客戶,再查詢客戶中所有聯繫人
Customer customer = session.get(Customer.class,1);
//查詢這個客戶的所有聯繫人
//直接得到客戶裏聯繫人的set集合
Set<LinkMan> linkman = customer.getLinkMan();

2.OID查詢

根據id查詢記錄----調用session裏面的get方法實現

//根據cid=1客戶,再查詢客戶中所有聯繫人
Customer customer = session.get(Customer.class,1);

3.HQL查詢

  1. hql:hibernate query language,hibernate提供一種查詢語言,hql語言和普通sql很相似,區別:普通sql操作數據庫表和字段,hql操作實體類和屬性
  2. 常用的hql語句
    (1)查詢所有: from 實體類名稱
    (2)條件查詢: from 實體類名稱 where 屬性名稱=?
    (3)排序查詢: from 實體類名稱 order by 實體類屬性名稱 asc/desc
  3. 使用hql查詢操作時候,使用Query對象
    (1)創建Query對象,寫hql語句
    (2)調用query對象裏面的方法得到結果
3.1HQL查詢所有

例:查詢所有客戶記錄
(1)創建Query對象,寫hql語句
(2)調用query對象裏面的方法得到結果

//1 創建query對象
Query query = session.createQuery("from Customer");
//2 調用方法得到結果
List<Customer> list = query.list();
for (Customer customer : list) {
	System.out.println(customer.getCid()+"::"+customer.getCustName());
}
3.2HQL常用查詢

hql條件查詢語句寫法:
(1)from 實體類名稱 where 實體類屬性名稱=? and實體類屬性名稱=?
(2)from 實體類名稱 where 實體類屬性名稱 like ?

//-----條件查詢--------
//1 創建query對象
//SELECT * FROM t_customer WHERE cid=? AND custName=?
Query query = session.createQuery("from Customer c where c.cid=? and c.custName=?");
//2 設置條件值
// 向?裏面設置值
// setParameter方法兩個參數
// 第一個參數:int類型是?位置,?位置從0開始
// 第二個參數:具體參數值
//設置第一個?值
query.setParameter(0, 1);
//設置第二個?值
query.setParameter(1, "百度");

//3 調用方法得到結果
List<Customer> list = query.list();

for (Customer customer : list) {
	System.out.println(customer.getCid()+"::"+customer.getCustName());
}


//-------模糊查詢------
//1 創建query對象
Query query = session.createQuery("from Customer c where c.custName like ?");

//2 設置?的值
// %浪%
query.setParameter(0, "%浪%");

//3 調用方法得到結果
List<Customer> list = query.list();

for (Customer customer : list) {
	System.out.println(customer.getCid()+"::"+customer.getCustName());
}


//-----排序查詢--------
//1 創建query對象
Query query = session.createQuery("from Customer order by cid desc");

//2 調用方法得到結果
List<Customer> list = query.list();

for (Customer customer : list) {
	System.out.println(customer.getCid()+"::"+customer.getCustName());
}


//------分頁查詢------
//1 創建query對象
//寫查詢所有的語句
Query query = session.createQuery("from Customer");

//2 設置分頁數據
//2.1 設置開始位置
query.setFirstResult(0);
//2.2 設置每頁記錄數
query.setMaxResults(3);

//3 調用方法得到結果
List<Customer> list = query.list();

for (Customer customer : list) {
	System.out.println(customer.getCid()+"::"+customer.getCustName());
}

//投影查詢
//1.投影查詢:查詢不是所有字段值,而是部分字段的值
//2 投影查詢hql語句寫法:
//(1)select 實體類屬性名稱1, 實體類屬性名稱2  from 實體類名稱
//(2)select 後面不能寫 * ,不支持的
//1 創建query對象
Query query = session.createQuery("select custName from Customer");

//2 調用方法得到結果
List<Object> list = query.list();

for (Object object : list) {
	System.out.println(object);
}


//----聚集函數使用----
//常用函數count、sum、avg、max、min
//1 創建query對象
Query query = session.createQuery("select count(*) from Customer");

//2 調用方法得到結果
//query對象裏面有方法,直接返回對象形式
Object obj = query.uniqueResult();

//返回int類型
//			int count = (int) obj;

//首先把object變成long類型,再變成int類型
Long lobj = (Long) obj;
int count = lobj.intValue();
System.out.println(count);

4.QBC查詢

  1. 使用hql查詢需要寫hql語句實現,但是使用qbc時候,不需要寫語句了,使用方法實現
  2. 使用qbc時候,操作實體類和屬性
  3. 使用qbc,使用Criteria對象實現
4.1QBC查詢所有

(1)創建Criteria對象
(2)調用方法得到結果

//1 創建對象
Criteria criteria = session.createCriteria(Customer.class);
//2 調用方法得到結果
List<Customer> list = criteria.list();
4.2QBC常用查詢
//-----條件查詢------
//1 創建對象
Criteria criteria = session.createCriteria(Customer.class);

//2 使用Criteria對象裏面的方法設置條件值
// 首先使用add方法,表示設置條件值
// 在add方法裏面使用類的方法實現條件設置
// 類似於 cid=?
//			criteria.add(Restrictions.eq("cid", 1));
//			criteria.add(Restrictions.eq("custName", "百度"));

criteria.add(Restrictions.like("custName", "%百%"));

//3 調用方法得到結果
List<Customer> list = criteria.list();


//-----排序查詢-----
//1 創建對象
Criteria criteria = session.createCriteria(Customer.class);

//2 設置對哪個屬性進行排序,設置排序規則 
criteria.addOrder(Order.desc("cid"));

//3 調用方法得到結果
List<Customer> list = criteria.list();


//-----分頁查詢-----
//1 創建對象
Criteria criteria = session.createCriteria(Customer.class);
//2 設置分頁數據
//2.1 設置開始位置
criteria.setFirstResult(0);
//2.2 每頁顯示記錄數
criteria.setMaxResults(3);
//3 調用方法得到結果
List<Customer> list = criteria.list();


//-----統計查詢------
//1 創建對象
Criteria criteria = session.createCriteria(Customer.class);
//2 設置操作
criteria.setProjection(Projections.rowCount());
//3 調用方法得到結果
Object obj = criteria.uniqueResult();
Long lobj = (Long) obj;
int count = lobj.intValue();


//-----離線查詢------
//1 servlet調用service,service調用dao
//(1)在dao裏面對數據庫crud操作
//(2)在dao裏面使用hibernate框架,使用hibernate框架時候,調用session裏面的方法實現功能
//1 創建對象
//Criteria criteria = session.createCriteria(Customer.class);
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);
//2 最終執行時候才需要到session
Criteria criteria = detachedCriteria.getExecutableCriteria(session);
List<Customer> list = criteria.list();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章