`
wangtong40
  • 浏览: 248740 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate 查询策略

    博客分类:
  • ORM
阅读更多

<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--> <!-- [if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]-->

<!-- [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();}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics