Hibernate 查询策略

<!-- [if !supportLists]-->第 I 条 <!-- [endif]-->HQL 查询策略

<!-- [if !supportLists]-->节 1.01 <!-- [endif]-->基本查询

以下是 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 );

<!-- [if !supportLists]-->节 1.02 <!-- [endif]-->子查询

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

<!-- [if !supportLists]-->节 1.03 <!-- [endif]-->分页查询

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

query.setMaxResults(10);

<!-- [if !supportLists]-->节 1.04 <!-- [endif]-->参数绑定

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" );

<!-- [if !supportLists]-->节 1.05 <!-- [endif]-->批量抓取 / 查询超时

query.setTimeout(60); // 查询超时

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

<!-- [if !supportLists]-->节 1.06 <!-- [endif]-->查询结果

<!-- [if !supportLists]-->(a) <!-- [endif]-->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() 要高 , 但提升性能不大。

<!-- [if !supportLists]-->(b) <!-- [endif]-->ScrollableResult 游标

Hibernate 查询时可能存在结果集太大无法载入内存的问题,可以阐释使用可滚动结果集 scrollable result 这种方法获取所需要的数据。

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

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

<!-- [if !supportLists]-->第 II 条 <!-- [endif]-->QBC/QBE 查询策略

<!-- [if !supportLists]-->节 2.01 <!-- [endif]-->基本查询

以下是 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 );

<!-- [if !supportLists]-->节 2.02 <!-- [endif]-->分页查询

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

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

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

criteria.setMaxResults(20); // 每页显示行数

<!-- [if !supportLists]-->节 2.03 <!-- [endif]-->参数绑定

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

<!-- [if !supportLists]-->节 2.04 <!-- [endif]-->批量抓取 / 查询超时

criteria.setTimeout(60);

criteria.setFetchSize(50);

<!-- [if !supportLists]-->节 2.05 <!-- [endif]-->查询结果

<!-- [if !supportLists]-->(a) <!-- [endif]-->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() 要高 , 但提升性能不大。

<!-- [if !supportLists]-->(b) <!-- [endif]-->ScrollableResult 游标

Hibernate 查询时可能存在结果集太大无法载入内存的问题,可以阐释使用可滚动结果集 scrollable result 这种方法获取所需要的数据。

ScrollableResults cusor = criteria.scroll();

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

<!-- [if !supportLists]-->第 III 条 <!-- [endif]-->原生 SQL 查询策略

<!-- [if !supportLists]-->节 3.01 <!-- [endif]-->基本查询

以下是 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 );

<!-- [if !supportLists]-->节 3.02 <!-- [endif]--> 分页查询

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

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

sqlQuery.setMaxResults(20); // 每页显示行数

<!-- [if !supportLists]-->节 3.03 <!-- [endif]-->参数绑定

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" );

<!-- [if !supportLists]-->节 3.04 <!-- [endif]-->批量抓取 / 查询超时

sqlQuery.setTimeout(60); // 查询超时

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

<!-- [if !supportLists]-->节 3.05 <!-- [endif]-->查询结果

<!-- [if !supportLists]-->(a) <!-- [endif]-->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() 要高 , 但提升性能不大。

<!-- [if !supportLists]-->(b) <!-- [endif]-->ScrollableResult 游标

Hibernate 查询时可能存在结果集太大无法载入内存的问题,可以阐释使用可滚动结果集 scrollable result 这种方法获取所需要的数据。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值