Hibernate 查詢策略

第 I 條                        HQL 查詢策略

節 1.01     基本查詢

如下是 HQL/QBC/Native SQL 三種查詢策略 sql

HQL 策略: 緩存

session.createQuery( "FROM Category c where c.name like 'Laptop%'" ); session

QBC 策略: 性能

session.createCriteria(Category . class ).add(Restrictions.like ( "name" , "Laptop%" )); spa

Native SQL 策略 orm

session.createSQLQuery( "select {c.*} from CATEGORY {c} where NAME like 'Laptop%'" ).addEntity( "c" ,Category . class ); 對象

 

節 1.02     子查詢

String hql = "SELECT user.username,user.password FROM UserInfo user WHERE user.username = (SELECT info.username FROM UserInfo info)" ; 內存

節 1.03     分頁查詢

Query query = session.createQuery( "FROM Category c where c.name like 'Laptop%'" ); get

query.setMaxResults(10); it

 

節 1.04     參數綁定

Query query = session.createQuery( "FROM Category c where c.name like :name" );

query.setParameter( "name" , "top" );

 

Query query = session.createQuery( "FROM Category c where c.name like ?" );

query.setParameter( 0 , "top" );

節 1.05     批量抓取 / 查詢超時

query.setTimeout(60); // 查詢超時

query.setFetchSize(50); // 批量抓取

節 1.06     查詢結果

(a)      List/Iterator

List list = query.list();

生成 sql:select category_id,name,parent_id from category where name like ?

Iterator categories = query.iterate();

生成 sql:select category_id,from category where name like ?

使用 iterate() 查詢時將對象加載到高速緩存中,因此效率較 list() 要高 , 但提高性能不大。

(b)  ScrollableResult 遊標

Hibernate 查詢時可能存在結果集太大沒法載入內存的問題,能夠闡釋使用可滾動結果集 scrollable result 這種方法獲取所須要的數據。

ScrollableResults cusor  = session.createQuery( "FROM Category c" ).scroll();

while (cusor.next()){cusor.get();}

 

 

 

 

 

 

第 II 條                     QBC/QBE 查詢策略

節 2.01     基本查詢

如下是 HQL/QBC/Native SQL 三種查詢策略

HQL 策略:

session.createQuery( "FROM Category c where c.name like 'Laptop%'" );

QBC 策略:

session.createCriteria(Category . class ).add(Restrictions.like ( "name" , "Laptop%" ));

Native SQL 策略

session.createSQLQuery( "select {c.*} from CATEGORY {c} where NAME like 'Laptop%'" ).addEntity( "c" ,Category . class );

節 2.02     分頁查詢

Criteria criteria = session.createCriteria(Category . class ).add(Restrictions.like ( "name" , "Laptop%" ));

criteria.addOrder(Order.asc ( "name" ));

criteria.setFirstResult(0); // 初始行數

criteria.setMaxResults(20); // 每頁顯示行數

節 2.03     參數綁定

Criteria criteria = session.createCriteria(Category . class ).add(Restrictions.like ( "name" , "top%" ));

節 2.04     批量抓取 / 查詢超時

criteria.setTimeout(60);

criteria.setFetchSize(50);

節 2.05     查詢結果

(a)      List/Iterator

List list = criteria .list();

生成 sql:select category_id,name,parent_id from category where name like ?

Iterator categories = criteria .iterate();

生成 sql:select category_id,from category where name like ?

使用 iterate() 查詢時將對象加載到高速緩存中,因此效率較 list() 要高 , 但提高性能不大。

(b)  ScrollableResult 遊標

Hibernate 查詢時可能存在結果集太大沒法載入內存的問題,能夠闡釋使用可滾動結果集 scrollable result 這種方法獲取所須要的數據。

ScrollableResults cusor  = criteria.scroll();

while (cusor.next()){cusor.get();}

 

 

 

 

第 III 條                   原生 SQL 查詢策略

節 3.01     基本查詢

如下是 HQL/QBC/Native SQL 三種查詢策略

HQL 策略:

session.createQuery( "FROM Category c where c.name like 'Laptop%'" );

QBC 策略:

session.createCriteria(Category . class ).add(Restrictions.like ( "name" , "Laptop%" ));

Native SQL 策略

session.createSQLQuery( "select {c.*} from CATEGORY {c} where NAME like 'Laptop%'" ).addEntity( "c" ,Category . class );

 

節 3.02       分頁查詢

Query sqlQuery = session.createSQLQuery( "select {c.*} from CATEGORY {c} where NAME like 'Laptop%'" ).addEntity( "c" ,Category . class );

sqlQuery.setFirstResult(0); // 初始行數

sqlQuery.setMaxResults(20); // 每頁顯示行數

節 3.03     參數綁定

 

Query sqlQuery = session.createSQLQuery( "select {c.*} from CATEGORY {c} where NAME like :name" ).addEntity( "c" ,Category . class );

sqlQuery.setParameter( "name" , "top" );

 

Query sqlQuery = session.createSQLQuery( "select {c.*} from CATEGORY {c} where NAME like ?" ).addEntity( "c" ,Category . class );

query.setParameter( 0 , "top" );

節 3.04     批量抓取 / 查詢超時

sqlQuery.setTimeout(60); // 查詢超時

sqlQuery.setFetchSize(50); // 批量抓取

節 3.05     查詢結果

(a)      List/Iterator

List list = sqlQuery .list();

生成 sql:select category_id,name,parent_id from category where name like ?

Iterator categories = sqlQuery .iterate();

生成 sql:select category_id,from category where name like ?

使用 iterate() 查詢時將對象加載到高速緩存中,因此效率較 list() 要高 , 但提高性能不大。

(b)  ScrollableResult 遊標

Hibernate 查詢時可能存在結果集太大沒法載入內存的問題,能夠闡釋使用可滾動結果集 scrollable result 這種方法獲取所須要的數據。

ScrollableResults cusor  = session.createQuery( "FROM Category c" ).scroll();

while (cusor.next()){cusor.get();}

相關文章
相關標籤/搜索