1、HQL( Hibernate Query Language ) 策略:
session.createQuery( "FROM Category c where c.name like 'Laptop%'" );
2、QBC (Query By Criteria ) 策略:
session.createCriteria(Category . class ).add(Restrictions.like ( "name" , "Laptop%" ));
3、Native SQL 策略
session.createSQLQuery( "select {c.*} from CATEGORY {c} where NAME like 'Laptop%'" ).addEntity( "c" ,Category . class );
参数绑定:
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" );
批量抓取:
query.setTimeout(60); // 查询超时
query.setFetchSize(50); // 批量抓取
查询结果:
List list = criteria .list();
生成 sql:select category_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();}