首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Hibernate 查詢方式總結

     編輯:Java 相關知識

1. get() 與 load()

session.get(Clazz, id);
session.load(Clazz, id);

區別:若無匹配資料庫記錄,load() 可能拋出無法恢復的異常。若類映射使用代理,load() 返回未初始化的代理,直到調用代理方法才訪問數據庫。若想在某物件中創建關聯卻不想同時加載關聯物件,這很有用。若設置了 batch-size,允許批量加載(因返回代理,無需從數據庫抓取所有物件數據)。若不確定是否有匹配行,應用 get(),它立即訪問數據庫,無對應行則返回 null。

2. HQL

// 返回單行記錄
String hql = "from TOrder o where o.id = ?";
TOrder o = (TOrder) s.createQuery(hql)
    .setParameter(0, orderId)
    .uniqueResult();

// 命名參數
Query q = sess.createQuery("from DomesticCat cat where cat.name = :name");
q.setString("name", "Fritz");

// 位置參數
Query q = sess.createQuery("from DomesticCat cat where cat.name = ?");
q.setString(0, "Izi");

// 命名參數列表
Query q = sess.createQuery("from DomesticCat cat where cat.name in (:namesList)");
q.setParameterList("namesList", names);

// 分頁查詢
Query q = sess.createQuery("from DomesticCat cat");
q.setFirstResult(20);
q.setMaxResults(10);
List cats = q.list();

3. Criteria

List cats = sess.createCriteria(Cat.class)
    .add( Restrictions.like("name", "Fritz%") )
    .add( Restrictions.or(
        Restrictions.eq("age", new Integer(0)),
        Restrictions.isNull("age")
    ) )
    .addOrder( Order.asc("name") )
    .addOrder( Order.desc("age") )
    .list();

4. Native SQL

String treeSql = ""
    + "select , level from tree t "
    + "start with t.parent_id = 0 "
    + "connect by prior t.id = t.parent_id";
List result = session.createSQLQuery(treeSql)
    .addEntity("t", Tree.class)
    .addScalar("level", Hibernate.INTEGER)
    .list();

5. Named SQL queries(不推薦)

6. filter(不推薦)

7. Detached queries(未測試)

DetachedCriteria 類允許在 Session 作用域外創建查詢,稍後使用任意 Session 執行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved