前几天系统中用到复杂的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
分享到:
相关推荐
在Oracle数据库中,SQL分页是一种非常常见的查询技术,它允许我们从大量数据中按需获取一部分结果,而不是一次性加载所有记录。这对于提高用户体验和优化系统性能至关重要,尤其是在处理大数据量的Web应用中。本实践...
- 封装:DAO类应封装具体的SQL查询和HQL(Hibernate Query Language)语句,避免在业务层暴露这些细节。 - 单一职责:每个DAO类应只负责一种类型的数据操作,如用户DAO只处理用户相关的操作。 - 可复用:设计通用的...
这篇博客文章“Hibernate中,利用Criteria查询容器实现sql的写法”可能详细讲解了如何使用Criteria API来构建复杂的查询条件,并将其转化为对应的SQL语句。 Criteria查询的基本使用步骤包括以下几个方面: 1. 创建...
7. **实际项目中的适应性**:在实际项目中,可能需要根据数据库类型和具体需求调整分页SQL的写法,例如Oracle支持ROWNUM,而MySQL则可以使用LIMIT和OFFSET。 **优化技巧**: 1. **缓存**:对于不经常变动的数据,...
除了直接使用SQL进行分页查询外,开发人员还经常使用ORM框架如Hibernate来实现分页功能。例如: ```java Query q = session.createQuery("from Catasc"); q.setFirstResult(20000); // 设置起始位置 q....
#### 三、分页查询的两种常见写法及其性能比较 1. **第一种写法**(推荐): ```sql SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM ) WHERE RN >= 21 ``` - **...
在Java开发中,我们通常使用JDBC或者ORM框架(如Hibernate、MyBatis)来执行这些SQL语句。例如,在Servlet环境下,你可能有一个名为`servletDemo1`的Servlet处理请求,它会接收到请求参数`currentPage`和`pageSize`...
HQL是Hibernate特有的查询语言,类似SQL,但操作的是对象而非表,支持更丰富的查询功能,如关联查询、分页、排序等。 三、数据映射类型 3.1 映射类型的作用 映射类型用于将Java对象的属性与数据库表的列对应,实现...
下面,我们将从多个角度来探索 MyBatis,了解它的优点、缺点、使用场合、与其他框架的区别、配置文件的写法、参数传递、动态 SQL 等。 什么是 MyBatis? MyBatis 是一个 Java 持久层框架,允许开发者使用 SQL 语句...
这种方法占用内存较少,但实现较为复杂,需要预先知道总记录数,并且不同数据库的分页SQL写法可能不同。 第三种方法是介于前两者之间,预加载一定数量的页数据,存储在Session中,以减少数据库查询次数。这种方法在...
MyBatis的分页功能通过插件实现,通常的分页插件基于拦截器机制,动态改变SQL语句的执行,从而实现分页效果。 MyBatis将SQL执行结果封装为目标对象并返回,支持多种映射方式,例如使用resultMap进行复杂映射。执行...
7. **模糊查询 like 语句的写法**:使用 #{} 时,可以在 SQL 中使用 '%value%' 来实现模糊查询。 8. **Dao 接口的工作原理**:在 MyBatis 中,Dao 接口通常用于定义 SQL 操作的抽象方法,其背后使用动态代理机制来...
- 使用场合:适合需要大量自定义SQL、管理操作数据库的项目。 - MyBatis与Hibernate的区别:Hibernate是一个全自动的ORM框架,而MyBatis是半自动的,更加轻量级。 - #{}和${}区别:#{}是预编译处理,${}是字符串...
2. **分页功能**:在列表展示中,为了提高用户体验,通常会使用分页显示大量数据。这可能通过在后台计算总记录数,然后根据每页显示的条数来确定页码。在请求学生列表时,除了请求当前页码,还需要传递每页的大小,...
DB2和Oracle是两种广泛应用的关系型数据库管理系统,它们在SQL语法上存在一些显著的差异,这使得在跨数据库系统开发时需要...为了减少迁移或兼容性问题,可以使用标准的SQL语法,或者使用数据库抽象层来隐藏这些差异。
8. MyBatis模糊查询的SQL写法。 9. MyBatis中的Dao接口是如何工作的,以及其参数不同的方法是否能重载。 10. MyBatis的分页实现以及分页插件的工作原理。 11. SQL执行结果封装成对象的映射方式。 12. 如何执行批量...
- 可以使用RowBounds或分页插件,如PageHelper。 11. **封装执行结果**: - MyBatis使用resultMap将结果集封装成Java对象。 12. **批量插入方法**: - 可以使用foreach标签。 13. **获取自动生成的主键值**: - ...
比如,模糊查询like语句的写法,以及分页查询的实现,MyBatis的分页插件原理等。 4. **ORM框架**:MyBatis的映射方式包括Map映射、注解映射和XML映射,面试中可能会要求解释它们是如何将SQL结果封装为目标对象并...
{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....