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

hibernate 使用SQL 分页写法

阅读更多

前几天系统中用到复杂的SQL,想用HQL 来实现结果HQl语句写不出来。想想hibernate也支持SQL 的,就只能写SQL 封装来实现了。

 SQL

select *
  from wcsc_service_log a,
       (select id, max(end_time) as end_time
          from wcsc_service_log
         group by id) b
 where a.id = b.id
   and a.end_time = b.end_time
   and COMPCODE = '0001'

 JAVA 代码封装这段SQL

public Pagination getServiceLog(String compcode, int pageNo, int pageSize) {
		String sql ="select a.* from wcsc_service_log a ,(select id,max(end_time)as end_time from wcsc_service_log group by id)b"+
		" where a.id=b.id and a.end_time=b.end_time and a.COMPCODE='"+compcode+"'";
		Query queryObject =getSession().createSQLQuery(sql).addEntity(ServiceLog.class); 
		queryObject.setFirstResult((pageNo - 1) * pageSize);
        queryObject.setMaxResults(pageSize);
        List<ServiceLog> list =queryObject.list();
        int count=getCount(compcode);
        Pagination p = new Pagination(pageNo, pageSize, count);
		if (count < 1) {
			p.setList(new ArrayList<ServiceLog>());
			return p;
		}
		p.setList(list);
		return p;
	}

   代码说明

   Query queryObject =getSession().createSQLQuery(sql).addEntity(ServiceLog.class);

   这句是执行SQL映射HIBERNATE 查询,注意createSQLQuery 该方法是SQL 语句,我们知道HQL 的方法是

   createQuery   另外封装成映射对象addEntity(ServiceLog.class),ServiceLog是你SQL JavaBEAN

   返回查询语句这样就可以HIBERNATE待用SQL 了

     queryObject.setFirstResult((pageNo - 1) * pageSize);
      queryObject.setMaxResults(pageSize);

    这2端是分页的语句 如果不分页可以不需要了

  这样就实现了HIBERNATE 调用复杂的SQL

分享到:
评论
1 楼 mylaughing 2017-10-30  
请问你的getCount是怎么处理的呢?

相关推荐

    Oracle的SQL分页实践

    在Oracle数据库中,SQL分页是一种非常常见的查询技术,它允许我们从大量数据中按需获取一部分结果,而不是一次性加载所有记录。这对于提高用户体验和优化系统性能至关重要,尤其是在处理大数据量的Web应用中。本实践...

    HibernateDAO的写法

    - 封装:DAO类应封装具体的SQL查询和HQL(Hibernate Query Language)语句,避免在业务层暴露这些细节。 - 单一职责:每个DAO类应只负责一种类型的数据操作,如用户DAO只处理用户相关的操作。 - 可复用:设计通用的...

    Hibernate中,利用Criteria查询容器实现sql的写法

    这篇博客文章“Hibernate中,利用Criteria查询容器实现sql的写法”可能详细讲解了如何使用Criteria API来构建复杂的查询条件,并将其转化为对应的SQL语句。 Criteria查询的基本使用步骤包括以下几个方面: 1. 创建...

    SSH分页技术详解与实例

    7. **实际项目中的适应性**:在实际项目中,可能需要根据数据库类型和具体需求调整分页SQL的写法,例如Oracle支持ROWNUM,而MySQL则可以使用LIMIT和OFFSET。 **优化技巧**: 1. **缓存**:对于不经常变动的数据,...

    Oracle分页查询

    除了直接使用SQL进行分页查询外,开发人员还经常使用ORM框架如Hibernate来实现分页功能。例如: ```java Query q = session.createQuery("from Catasc"); q.setFirstResult(20000); // 设置起始位置 q....

    oracle分页查询

    #### 三、分页查询的两种常见写法及其性能比较 1. **第一种写法**(推荐): ```sql SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM ) WHERE RN &gt;= 21 ``` - **...

    分页代码Oracle

    在Java开发中,我们通常使用JDBC或者ORM框架(如Hibernate、MyBatis)来执行这些SQL语句。例如,在Servlet环境下,你可能有一个名为`servletDemo1`的Servlet处理请求,它会接收到请求参数`currentPage`和`pageSize`...

    Java相关课程系列笔记之十四Hibernate学习笔记

    HQL是Hibernate特有的查询语言,类似SQL,但操作的是对象而非表,支持更丰富的查询功能,如关联查询、分页、排序等。 三、数据映射类型 3.1 映射类型的作用 映射类型用于将Java对象的属性与数据库表的列对应,实现...

    1000道互联网Java架构师面试题

    下面,我们将从多个角度来探索 MyBatis,了解它的优点、缺点、使用场合、与其他框架的区别、配置文件的写法、参数传递、动态 SQL 等。 什么是 MyBatis? MyBatis 是一个 Java 持久层框架,允许开发者使用 SQL 语句...

    举例详解用Java实现web分页功能的方法

    这种方法占用内存较少,但实现较为复杂,需要预先知道总记录数,并且不同数据库的分页SQL写法可能不同。 第三种方法是介于前两者之间,预加载一定数量的页数据,存储在Session中,以减少数据库查询次数。这种方法在...

    MyBatis的27道面试题

    MyBatis的分页功能通过插件实现,通常的分页插件基于拦截器机制,动态改变SQL语句的执行,从而实现分页效果。 MyBatis将SQL执行结果封装为目标对象并返回,支持多种映射方式,例如使用resultMap进行复杂映射。执行...

    1000道 互联网大厂Java工程师面试题(1)(1)(1).pdf

    7. **模糊查询 like 语句的写法**:使用 #{} 时,可以在 SQL 中使用 '%value%' 来实现模糊查询。 8. **Dao 接口的工作原理**:在 MyBatis 中,Dao 接口通常用于定义 SQL 操作的抽象方法,其背后使用动态代理机制来...

    2021最新Java程序员面试题

    - 使用场合:适合需要大量自定义SQL、管理操作数据库的项目。 - MyBatis与Hibernate的区别:Hibernate是一个全自动的ORM框架,而MyBatis是半自动的,更加轻量级。 - #{}和${}区别:#{}是预编译处理,${}是字符串...

    基于java web学生管理系统数据库mysql基本没有css样式,很基础的写法

    2. **分页功能**:在列表展示中,为了提高用户体验,通常会使用分页显示大量数据。这可能通过在后台计算总记录数,然后根据每页显示的条数来确定页码。在请求学生列表时,除了请求当前页码,还需要传递每页的大小,...

    DB2、ORACLE

    DB2和Oracle是两种广泛应用的关系型数据库管理系统,它们在SQL语法上存在一些显著的差异,这使得在跨数据库系统开发时需要...为了减少迁移或兼容性问题,可以使用标准的SQL语法,或者使用数据库抽象层来隐藏这些差异。

    java题库java题库java题库

    8. MyBatis模糊查询的SQL写法。 9. MyBatis中的Dao接口是如何工作的,以及其参数不同的方法是否能重载。 10. MyBatis的分页实现以及分页插件的工作原理。 11. SQL执行结果封装成对象的映射方式。 12. 如何执行批量...

    1000道 互联网Java工程师面试题 485页_PDF密码解除.pdf

    - 可以使用RowBounds或分页插件,如PageHelper。 11. **封装执行结果**: - MyBatis使用resultMap将结果集封装成Java对象。 12. **批量插入方法**: - 可以使用foreach标签。 13. **获取自动生成的主键值**: - ...

    程序员面试秘籍.docx

    比如,模糊查询like语句的写法,以及分页查询的实现,MyBatis的分页插件原理等。 4. **ORM框架**:MyBatis的映射方式包括Map映射、注解映射和XML映射,面试中可能会要求解释它们是如何将SQL结果封装为目标对象并...

    Java学习笔记-个人整理的

    {13.5}分页查询}{196}{section.13.5} {13.5.1}MySQL}{198}{subsection.13.5.1} {13.6}连接池}{199}{section.13.6} {13.6.1}Wrapper}{199}{subsection.13.6.1} {13.7}DAO}{199}{section.13.7} {13.8}java.util....

Global site tag (gtag.js) - Google Analytics