- 浏览: 989384 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (223)
- JDBC技术 (29)
- Java Base (21)
- SSH框架的集合 (5)
- Javascript部分 (16)
- Sping2.5框架 (6)
- Hibernate框架 (19)
- JDBC中的数据库连接 (5)
- Ajax技术应用 (9)
- Java工具包下载 (3)
- Database (4)
- Java Web (13)
- 我的生活 (4)
- Struts2 (25)
- S2SH (1)
- Prototype (1)
- jfreeChart (5)
- JPA (7)
- JBPM (1)
- JasperReport (6)
- DWR (1)
- freeMark (2)
- IBatis (2)
- FCKeditor (2)
- POI (1)
- JQuery (6)
- JSON (1)
- JavaMail (3)
- Flex (2)
- CSS收藏夹 (1)
- 润乾报表 (2)
- 开源技术 (1)
- Android (2)
- Android_UI (1)
- Android_OS (6)
- Android_OpenLibs (3)
- Volley (1)
- JS_OpenLibs (1)
- Hessian (3)
- OS (1)
最新评论
-
damoluomu:
简单易懂
Java Web开发Session超时设置 -
di1984HIT:
学习了~~~~~~
Java Web开发Session超时设置 -
lord_is_layuping:
...
Java Web开发Session超时设置 -
15111285554:
...
Java Web开发Session超时设置 -
sfg1314:
暂停后重新下载就会报错:ClientAbortExceptio ...
Java Web 文件下载之断点续传
虽然Hibernate帮助我们完成了分页功能,但若有的数据库不支技分页查询,Hibernate的分页的效率可就不高了,它先查询出一部分然后现在内存当中取出你所要的那一页。
Hibernate支持Native SQL(使用SQL Query)也、支持存储过程下面就来说说Hibernate调用存储过程来分页
在数据库创建Ture_Page存储过程
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
ALTER PROCEDURE Ture_Page
@PageSize int, --每页的行数
@PageIndex int, --1 代表第一页
@Col varchar(250), --要显示的字段
@Table varchar(200), --所用到的表,复条的话就写from与where之间的内容
@Where varchar(200)='', --所用到的条件
@OKey varchar(50), --排序字段
@Order varchar(20)='ASC' --排序方式
as
declare @cmdstr varchar(2000)
declare @cmdstrcount varchar(2000)
set nocount on
set @cmdstr='select top '
set @cmdstr=@cmdstr+convert(nvarchar,@PageSize)
if @Order='DESC' and @PageIndex>1
set @cmdstr=@cmdstr+' '+@Col+' from '+@Table+' where '+@OKey+'<'
else if @PageIndex=1
set @cmdstr=@cmdstr+' '+@Col+' from '+@Table+' where '+@OKey+'>='
else
set @cmdstr=@cmdstr+' '+@Col+' from '+@Table+' where '+@OKey+'>'
if @PageIndex>1
begin
if @Order='ASC'
set @cmdstr=@cmdstr+'(select max ('+@OKey+') from (select top '
else
set @cmdstr=@cmdstr+'(select min ('+@OKey+') from (select top '
set @cmdstr=@cmdstr+convert(nvarchar,(@PageIndex-1)*@PageSize)
if @Where<>''
set @cmdstr=@cmdstr+' '+@OKey+' from '+@Table+' where '+@Where+' order by '+@OKey+' '+@Order+') as t) '
else
set @cmdstr=@cmdstr+' '+@OKey+' from '+@Table+' order by '+@OKey+' '+@Order+') as t) '
end
else
set @cmdstr=@cmdstr+' 0 ' --convert(nvarchar,0)
print @cmdstr
if @Where<>''
set @cmdstr=(@cmdstr+' and '+@Where+' order by '+@OKey+' '+@Order)
else
set @cmdstr=(@cmdstr+' order by '+@OKey+' '+@Order)
print @cmdstr
exec(@cmdstr)
set nocount off
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Hibernate的配置文件:
<hibernate-mapping>
<class name="com.mengya.entity.TDepart" table="t_depart" schema="dbo" catalog="oaproject">
<id name="DId" type="java.lang.Integer">
<column name="d_id" />
<generator class="native" />
</id>
<property name="DName" type="java.lang.String">
<column name="d_name" length="50" />
</property>
<property name="DRemark" type="java.lang.String">
<column name="d_remark" />
</property>
<set name="TEmps" inverse="true">
<key>
<column name="d_id" />
</key>
<one-to-many class="com.mengya.entity.TEmp" />
</set>
</class>
<!--<sql-query>不在<class>内面--> //这里我使用的Hibernate的getHibernateTemplate()方法也要可直接得到session public Object doInHibernate(Session session) throws HibernateException, SQLException { 在本类中,调用查询类存储过程时,调用session.getNamedQuery("…")方法来获得User.hbm.xml中配置的查询存储过程。在其余的存储过程调用的测试中,首先通过hibernate的session获得connection,然后调用connection对象的相应方法来实现存储过程的调用。 同样,这样做的话也会带来弊端可移植性差。改库的话也要创建该存储过程
<sql-query name="TDepartTure_Page" callable="true">
<return alias="TDepart" class="com.mengya.entity.TDepart">
<return-property name="DId" column="d_id"/>
<return-property name="DName" column="d_name"/>
<return-property name="DRemark" column="d_remark"/>
</return>
{call Ture_Page(?,?,?,?,?,?,?)}
<query-param name="PageSize" type="int"/>
<query-param name="PageIndex" type="int"/>
<query-param name="Col" type="String"/>
<query-param name="Table" type="String"/>
<query-param name="Where" type="String"/>
<query-param name="OKey" type="String"/>
<query-param name="Order" type="String"/>
</sql-query>
</hibernate-mapping>
调用存储过程:
......
/*
* 分页查询所有部门信息
*/
public List getPageDepart(final int pagesize,final int pageindex){
List pagelist=null;
try {
pagelist=getHibernateTemplate().executeFind(new HibernateCallback(){
Query query=session.getNamedQuery("TDepartTure_Page");
query.setInteger(0, pagesize);
query.setInteger(1, pageindex);
query.setString(2, "d_id,d_name,d_remark");
query.setString(3, "t_depart");
query.setString(4, "");
query.setString(5, "d_id");
query.setString(6, "desc");
return query.list();
}
});
} catch (RuntimeException e) {
e.printStackTrace();
throw e;
}
return pagelist;
}
发表评论
-
Hibernate的HQL not like查询
2009-09-24 18:20 9744今天想用Hibernate的Restriction ... -
Hibernate Gossip: Bag
2009-09-14 16:37 1436Bag是集合,与Set不同的是,Bag允许重复的元素,在Jav ... -
hibernate的Restrictions用方说明
2009-06-15 21:09 1882方法 说明 Restric ... -
Hibernate完成常用的JDBC操作下
2009-05-29 16:38 1422一方: package com.mengya.dao; i ... -
Hibernate完成常用的JDBC操作上
2009-05-29 16:35 1881package com.mengya.dao; import ... -
Native SQL查询
2009-04-29 22:02 1553你也可以使用你的数据 ... -
Hibernate中实体对象的生命周期
2009-04-21 22:58 1400实体对象的生命周期在Hibernate应用中是一个很关键的概念 ... -
HibernateTemplate的常规用法
2009-04-21 22:55 1316HibernateTemplate提供非常多的常用方法来完成基 ... -
cascade与inverse的作用
2009-04-21 22:52 1757Cascade:用来说明当对主对象进行某种操作时是否对其关联的 ... -
Hibernate一对一的使用
2009-04-21 22:50 1778数据库:create table student( id ... -
Hibernate多对多说明
2009-04-21 22:47 1388数据库:--学生表create table stu( s_i ... -
query.iterate()与query.list()的区别
2009-04-21 22:46 1994Query query=this.GetSession().c ... -
Hibernate中的Query一些基本用法
2009-04-21 22:45 5023/*** 添加*/public void save(Stu s ... -
Hibernate中Criteria的使用
2009-04-21 22:42 2801/*** 使用Criteria全查询*/public List ... -
Hibernate关联表特殊查询(一方)inner join fetch,left join fet
2009-04-21 22:40 18037inner join fetch/*** 一对多中的一方inn ... -
Hibernate关联表特殊查询(多方)上
2009-04-21 22:39 2339/*** 多条件组合查询*/ public List get ... -
get和load的区别
2009-04-20 17:20 1189(1)load()方法从来就是假定数据在数据库中是存在的,在使 ... -
Hibernate中的ORM关系映射主键生成方式即(Generator的class值)
2009-04-20 17:18 2130主键产生器可选项说明 ...
相关推荐
3. **调用存储过程**:创建`CallableStatement`对象,设置存储过程的参数,并执行存储过程。例如: ```java Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_db", "username", ...
Hibernate调用Oracle存储过程 Hibernate框架支持直接调用存储过程,通过配置映射文件或注解实现。 ##### 2. Java直接调用Oracle存储过程 使用Java JDBC API可以直接调用Oracle存储过程,通过`CallableStatement`...
在Struts和Hibernate这两个流行的Java Web开发框架的组合中,实现动态分页是一项常见的需求。动态分页允许用户浏览大量的数据,而不会一次性加载所有记录,从而提高用户体验和系统性能。下面将详细介绍如何在Struts...
- **性能优化**:避免在每次分页请求时都计算总记录数,可以使用预计算或者存储过程来获取。 - **安全考虑**:对用户输入的页码和每页记录数进行验证,防止SQL注入等安全问题。 - **用户体验**:合理设置每页显示的...
为了在Hibernate中调用上述存储过程,你需要编写相应的DAO方法,使用`Session`对象的`createSQLQuery`或`call`方法来执行SQL查询或存储过程。 #### 七、总结 本文介绍了一种基于Struts和Hibernate实现高效分页的...
- **用Java调用Oracle存储过程**:使用`CallableStatement`接口来调用存储过程,设置输入参数,执行存储过程并获取输出结果。 #### 动态查询在存储过程中的应用 - **本地动态SQL**:在存储过程中构建动态SQL语句,...
4. 当数据库不支持`LIMIT`和`OFFSET`或`ROW_NUMBER()`时,可能需要通过自定义SQL或存储过程来实现。 总之,理解和熟练运用Hibernate中的分页技术对于优化系统性能至关重要,无论是假分页还是真分页,都需要根据实际...
- **使用Hibernate调用存储过程**: Hibernate提供了一种便捷的方式来调用存储过程,并处理结果集。 #### 九、在存储过程中做简单动态查询 - **本地动态SQL**: 直接在存储过程中构建动态SQL语句。 - **使用DBMS_SQL...
在Hibernate中,我们可以使用Criteria、HQL(Hibernate Query Language)或者JPA的Query来实现分页查询。然而,这些方式在每个查询中都需要编写重复的分页代码,这降低了代码的复用性。因此,创建一个通用的分页辅助...
在这个例子中,首先获取Hibernate的Session对象,然后通过`session.connection()`获取底层的JDBC连接,接着创建`CallableStatement`并执行存储过程。注意,由于没有使用Spring进行事务管理,所有操作需要手动提交。 ...
`queryForPage` 方法通过`getHibernateTemplate().executeFind()`方法执行HQL查询,并利用`HibernateCallback`接口回调来设置查询的起始位置和最大结果数,从而实现分页。`getAllRowCount` 方法则直接返回HQL查询后...
3. 缓存:如果数据不常变动,可以使用缓存技术(如Hibernate的第二级缓存)来存储已分页的结果,减少对数据库的访问。 4. 负载均衡和数据库读写分离:在大型系统中,可以通过负载均衡和数据库读写分离进一步提高性能...
在数据库查询时,我们需要利用Hibernate的Criteria API或HQL(Hibernate Query Language)来编写分页查询。这通常涉及到设置查询条件、限制查询结果的数量(如每页多少条记录)以及指定查询的起始位置(当前页的第一...
`Pager` 类是用来存储分页信息的实体类,包括总行数(`totalRows`)、每页显示的行数(`pageSize`)、当前页号(`currentPage`)、总页数(`totalPages`)、当前页在数据库中的起始行(`startRow`)和要跳转的URL(`linkUrl`)...
在Java中,我们可以使用JDBC(Java Database Connectivity)来连接Oracle数据库并执行上述SQL语句或调用存储过程。以下是一个基本的示例: ```java import java.sql.*; public class OraclePagingExample { ...
5. **调用Oracle存储过程**:通过Java或Hibernate等工具调用Oracle存储过程,需要注意参数传递和结果集的处理。 #### 动态SQL与存储过程 在存储过程中执行动态SQL,有两种主要方式: 1. **本地动态SQL**:适用于...
执行存储过程通常需要`EXECUTE`权限。 - **权限赋予权限**:例如,可以使用`GRANT EXECUTE ON MY_PROCEDURE TO Jelly;`来授予用户Jelly对存储过程MY_PROCEDURE的执行权限。 - **调用示例**:调用存储过程可通过`...
总结,"struts2+hibernate3+spring3分页"项目结合了SSH框架的优势,实现了高效、灵活的后端分页功能,利用MySQL数据库存储数据。开发者可以通过学习这个项目,深入理解如何在实际项目中集成和运用SSH框架,以及如何...
在这个Demo中,开发者可能使用了Hibernate的Criteria API或HQL来构造动态查询,这允许根据用户输入的页码和每页记录数来定制SQL语句,从而实现分页功能。 5. **readme文件**: 这个文件通常包含了项目的详细说明,...
然后调用execute()方法执行存储过程,并通过CallableStatement对象获取存储过程输出的参数值。 ### Oracle存储过程与函数的区别 存储过程 PROCEDURE 和函数 FUNCTION 都是PL/SQL程序,都可以有返回值。但存储过程是...