`
pesome
  • 浏览: 67961 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hibernate native sql的小技巧

阅读更多

为了性能考虑,使用了 native sql 。因为需要分页,需要 2 sql ,一个获取 list 一个取得总数。获取 list 很好写:

 

 1 private  List getListByNativeSQL( final  Class cls,  final  String sql)  {
 2
 3         return  (List) getHibernateTemplate().execute( new  HibernateCallback()  {
 4
 5             public  Object doInHibernate(Session session)
 6
 7                    throws  HibernateException  {
 8
 9                return  session.createSQLQuery(sql).addEntity(cls).list();
10
11            }

12
13        }
);
14
15     }

16

 

获取总数查了下 hibernate reference, 试了几次才明白用法 :<!----><o:p></o:p>

<o:p> </o:p>

 1 private  BigInteger getCountByNativeSQL( final  String sql)  {
 2
 3         return  (BigInteger) getHibernateTemplate().execute(
 4
 5                new  HibernateCallback()  {
 6
 7                    public  Object doInHibernate(Session session)
 8
 9                           throws  HibernateException  {
10
11                       return  (BigInteger) (session.createSQLQuery(sql).uniqueResult());
12
13                   }

14
15               }
);
16
17     }

18

这里的

sql 是“ select count(*) 开头的”。这里大家可能要问,为什么要使用 BigInteger ,因为如果用 uniqueResult() 默认就返回 BigInteger ,而 BigInteger cast Integer 会出错。那么如果我就是要返回 Integer 呢,可以通过下面的办法实现: <o:p> </o:p>

<o:p> </o:p>

 1 private  Integer getCountByNativeSQL( final  String sql)  {
 2
 3         return  (Integer) getHibernateTemplate().execute(
 4
 5                new  HibernateCallback()  {
 6
 7                    public  Object doInHibernate(Session session)
 8
 9                           throws  HibernateException  {
10
11                       return  (Integer) (session.createSQLQuery(sql).addScalar( " count " , Hibernate.INTEGER).uniqueResult());
12
13                   }

14
15               }
);
16
17     }

18

大家注意粗体的部分,这里是给一个

alias 赋予类型,那么 sql 就需要变成以 ”select count(*) as count ” 开头了。 <o:p> </o:p>
分享到:
评论

相关推荐

    Java.Persistence.with.Hibernate.pdf

    为了方便进行数据查询,Hibernate提供了三种查询方式:HQL、Criteria API和Native SQL查询。 - **HQL**:一种面向对象的查询语言,语法类似于SQL,但以面向对象的方式进行查询。 - **Criteria API**:基于标准的...

    Hibernate+中文文档

    14.15. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个Criteria 实例 15.2. 限制结果集内容 15.3. 结果集排序 15.4. 关联 15.5. 动态关联抓取 15.6. 查询示例 15.7. 投影(Projections)、...

    hibernate3.2中文文档(chm格式)

    14.15. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个Criteria 实例 15.2. 限制结果集内容 15.3. 结果集排序 15.4. 关联 15.5. 动态关联抓取 15.6. 查询示例 15.7. 投影(Projections)、...

    HibernateAPI中文版.chm

    14.15. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个Criteria 实例 15.2. 限制结果集内容 15.3. 结果集排序 15.4. 关联 15.5. 动态关联抓取 15.6. 查询示例 15.7. 投影(Projections)、...

    最经典的hibernate教程_从入门到精通(共四篇)

    - **Native SQL**: 直接使用SQL进行查询,保留了数据库特定的功能。 **性能优化** - **延迟加载(Lazy Loading)**: 只有在真正需要的时候才加载关联对象,避免了不必要的数据传输。 - **批处理**: 通过设置批处理...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     6.4.5 native标识符生成器  6.5 映射自然主键  6.5.1 映射单个自然主键  6.5.2 映射复合自然主键  6.6 小结  6.7 思考题 第7章 映射一对多关联关系  7.1 建立多对一的单向关联关系  7.1.1 元素的not-null...

    hibernate小结

    主要内容包括:Hibernate映射中的Lazy加载策略、Hibernate查询语言(HQL)的使用方法,以及一些基本配置与操作技巧。通过本文的学习,你将能够更加熟练地掌握Hibernate这一强大的对象关系映射(ORM)工具。 #### 二...

    Hibernate中文详细学习文档

    14.15. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个Criteria 实例 15.2. 限制结果集内容 15.3. 结果集排序 15.4. 关联 15.5. 动态关联抓取 15.6. 查询示例 15.7. 投影(Projections)、...

    Hibernate 中文 html 帮助文档

    14.15. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个Criteria 实例 15.2. 限制结果集内容 15.3. 结果集排序 15.4. 关联 15.5. 动态关联抓取 15.6. 查询示例 15.7. 投影(Projections)、聚合...

    最全Hibernate 参考文档

    14.14. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个Criteria 实例 15.2. 限制结果集内容 15.3. 结果集排序 15.4. 关联 15.5. 动态关联抓取 15.6. 查询示例 15.7. 投影(Projections)、聚合...

    Hibernate教程

    15.14. 小技巧 & 小窍门 16. 条件查询(Criteria Queries) 16.1. 创建一个Criteria 实例 16.2. 限制结果集内容 16.3. 结果集排序 16.4. 关联 16.5. 动态关联抓取 16.6. 查询示例 16.7. 投影(Projections)、...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    14.15. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个Criteria 实例 15.2. 限制结果集内容 15.3. 结果集排序 15.4. 关联 15.5. 动态关联抓取 15.6. 查询示例 15.7. 投影(Projections)、...

    hibernate 体系结构与配置 参考文档(html)

    小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个Criteria 实例 15.2. 限制结果集内容 15.3. 结果集排序 15.4. 关联 15.5. 动态关联抓取 15.6. 查询示例 15.7. 投影(Projections)、聚合...

    Hibernate Oracle sequence的使用技巧

    3. 如果使用`native`作为主键生成策略,Hibernate会根据底层数据库方言选择合适的机制。在Oracle环境中,它默认查找`hibernate_sequence`。如果没有这个sequence,连接Oracle时会抛出错误。 总之,理解并正确使用...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    本章主要介绍单个持久化类与单个数据库表之间进行映射的方法,尤其是当持久化类的属性不和数据库表的字段一一对应时的映射技巧。 5.1 持久化类的属性及访问方法 101 5.1.1 基本类型属性和包装类型属性 102 5.1.2 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     6.4.5 native标识符生成器  6.5 映射自然主键  6.5.1 映射单个自然主键  6.5.2 映射复合自然主键  6.6 小结  6.7 思考题 第7章 映射一对多关联关系  7.1 建立多对一的单向关联关系  7.1.1 元素的not-null...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     6.4.5 native标识符生成器  6.5 映射自然主键  6.5.1 映射单个自然主键  6.5.2 映射复合自然主键  6.6 小结  6.7 思考题 第7章 映射一对多关联关系  7.1 建立多对一的单向关联关系  7.1.1 元素的not-null...

    Hibernate3+中文参考文档

    14.14. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个Criteria 实例 15.2. 限制结果集内容 15.3. 结果集排序 15.4. 关联 15.5. 动态关联抓取 15.6. 查询示例 15.7. 投影(Projections)、聚合...

    hibernate3.04中文文档.chm

    15.14. 小技巧 & 小窍门 16. 条件查询(Criteria Queries) 16.1. 创建一个Criteria 实例 16.2. 限制结果集内容 16.3. 结果集排序 16.4. 关联 16.5. 动态关联抓取 16.6. 查询示例 16.7. 投影(Projections)、...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     6.4.5 native标识符生成器  6.5 映射自然主键  6.5.1 映射单个自然主键  6.5.2 映射复合自然主键  6.6 小结  6.7 思考题 第7章 映射一对多关联关系  7.1 建立多对一的单向关联关系  7.1.1 元素的not-null...

Global site tag (gtag.js) - Google Analytics