2009-07-30
ibatis调用oracle存储过程分页
关键字: oracle存储过程分页
1、users.xml片段
Xml代码
<resultMap class="user" id="get-all-user">
<result property="id" column="id" />
<result property="userName" column="username" />
<result property="password" column="password" />
</resultMap>
……
<parameterMap id="swapParameters" class="java.util.Map">
<parameter property="sqlscript" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
<parameter property="pageSize" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN"/>
<parameter property="pageIndex" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN"/>
<parameter property="totalCount" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT"/>
<parameter property="totalPage" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT"/>
<parameter property="v_cur" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT" resultMap="get-all-user" />
</parameterMap>
<procedure id="retrieveByLikeCmpRoleC" parameterMap="swapParameters">
{call P_QuerySplit(?,?,?,?,?,?)}
</procedure>
2、oracle存储过程
Java代码
create or replace procedure P_QuerySplit(sqlscript varchar2, --表名/SQL语句
pageSize integer, --每页记录数
pageIndex integer, --当前页
totalCount out number, --总记录数
totalPage out number, --总页数
v_cur out sys_refcursor --返回游标
) is
v_PageSize number;
v_PageIndex number;
v_SQL_Count varchar2(4000);
v_SQL varchar2(4000);
v_StartIndex number;
v_EndIndex number;
begin
v_PageSize := pageSize;
if v_PageSize = 0 then
v_PageSize := 1;
end if;
--统计记录数量
v_SQL_Count := 'select count(*) from (' || sqlscript || ') a ';
execute immediate v_SQL_Count
into totalCount;
--计算总页数
totalPage := CEIL(totalCount / v_PageSize);
--验证页号 如果页号大余了最大页数,返回最后一页
v_PageIndex := pageIndex;
if v_PageIndex > totalPage then
v_PageIndex := totalPage;
end if;
--计算开始的Index和结束的Index
v_StartIndex := (v_PageIndex - 1) * v_PageSize + 1;
v_EndIndex := v_PageIndex * v_PageSize;
v_SQL := 'SELECT /*+ FIRST_ROWS */* FROM (';
v_SQL := v_SQL || ' SELECT A.*, ROWNUM RN ';
v_SQL := v_SQL || ' FROM (' || sqlscript || ') A ';
v_SQL := v_SQL || ' WHERE ROWNUM <= ' || v_EndIndex;
v_SQL := v_SQL || ')WHERE RN >= ' || v_StartIndex;
open v_cur for v_SQL;
end P_QuerySplit;
3、dao中调用
Java代码
Map b = new HashMap();
b.put("sqlscript", " users ");
b.put("pageSize", Integer.parseInt("2"));
b.put("pageIndex", Integer.parseInt("3"));
getSqlMapClientTemplate().queryForList("retrieveByLikeCmpRoleC", b);
System.out.println("总记录数:"+b.get("totalCount"));
System.out.println("总页数:"+b.get("totalPage"));
List<Users> listusers =(List<Users>) b.get("v_cur");
for(Users p:listusers){
System.out.println(p.getId()+"---"+p.getUserName()+"---"+p.getPassword());
}
备注:由于oracle的存储过程有2种写法,一种是FUNCTION函数,一种是procedure。他们的返回值的写法不一样,如:
Java代码
CREATE OR REPLACE PACKAGE REFS_PCK AS
TYPE REF_CURSOR_T IS REF CURSOR;
FUNCTION GET_REFS RETURN REF_CURSOR_T;
procedure getFlowTrack(cur_Scan out REF_CURSOR_T,
cur_Send out REF_CURSOR_T);
END REFS_PCK;
/
CREATE OR REPLACE PACKAGE BODY REFS_PCK IS
FUNCTION GET_REFS RETURN REF_CURSOR_T IS
L_CURSOR REF_CURSOR_T;
BEGIN
OPEN L_CURSOR FOR
SELECT * FROM USERS;
RETURN L_CURSOR;
END GET_REFS;
procedure getFlowTrack(cur_Scan out REF_CURSOR_T,
cur_Send out REF_CURSOR_T) as
begin
--1
open cur_Scan for
select * from USERS;
--2
open cur_Send for
select * from USERS;
end getFlowTrack;
END REFS_PCK;
那么在xml中的调用,针对函数的是:
Xml代码
<procedure id="getRefs" parameterMap="output">{ ? = call refs_pck.get_refs }</procedure>
针对procedure的是
Xml代码
<procedure id="getRefsaa" parameterMap="outputaa">{ call refs_pck.getFlowTrack(?,?) }</procedure>
即一个有“?”,一个没有。第二个注意的地方是:oracle存储过程中的参数类型number对应的java中的类型还是java.lang.Integer
v
分享到:
相关推荐
最近没事儿写了个ibatis最完的例子,这个东西很好用,也很灵活。里面附带了ibatis详细学习文档,各种需要的jar包,最主要是有一个实用的例子,下载下来后在自己的机器上创建数据库建个表,修改一下配置就可以直接...
这个"spring+struts+ibaits实例.zip"压缩包提供了一个经典的实例,帮助开发者理解这三大框架如何协同工作。下面我们将深入探讨这三个框架的核心概念、功能以及它们在实际项目中的整合方式。 **Spring框架** Spring...
Ibatis的主要目标是简化SQL与Java对象之间的绑定过程,提供更为灵活的数据库操作方式。 二、Ibatis的核心组件 1. XML配置文件:Ibatis的主要配置文件,包括数据源、事务管理器以及映射文件的引入等,是连接数据库...
在本项目中,"struts+spring_ibaits+调用Mysql存储过程实现增删改查",意味着开发者利用这三个框架来处理数据库中的增、删、改、查(CRUD)操作,并通过调用MySQL的存储过程来实现这些功能。存储过程是预编译的SQL...
Ibatis,全称为MyBatis-iBatis,是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Ibatis消除了几乎所有的JDBC代码和参数手动设置以及结果集的检索。Ibatis可以被用来作为JDBC的替代品,解决了JDBC...
不久也会发表SSI(Spring2.5+Struts2+Ibaits)整合配置的系列文章。?????? 该篇主要描述所需jar文件以及编写数据库连接部分。需要的jar文件有数据库连接相关jar文件如下:commons- dbcp.jarcommons-logging.jarcommons...
【标题】:“Ibaits例子与PPT” 【描述】:本资料主要涵盖了关于Ibatis的相关知识,通过一个具体的myeclipse工程实例来深入解析Ibatis的使用,同时结合PPT的形式,使得学习过程更加直观易懂。Ibatis是一个优秀的...
ibatis指导和spring常用项目实例.part1.raribatis指导和spring常用项目实例.part1.rar
1. **Spring Boot**:Spring Boot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它预设了各种默认配置,使得开发者可以快速上手,同时提供了一种“约定优于配置”的开发模式。Spring ...
在IT领域,特别是数据库操作与Java开发中,利用ibatis框架调用Oracle存储过程是一个常见的需求,这不仅能够提升代码的执行效率,还能增强应用程序的安全性。本文将深入解析ibatis如何与Oracle数据库中的存储过程进行...
本文将以“ibaits例子曾删改”为主题,深入探讨如何利用Ibatis进行数据的增删改查(CRUD)操作。我们将从基础概念入手,逐步解析Ibatis的核心组件,通过实例演示具体步骤,帮助初学者快速上手。 Ibatis,全称为...
通过这种方式,你可以轻松地在Spring Boot应用中管理数据库操作,同时利用iBatis的灵活性和强大功能。在实际开发中,你还可以进一步探索MyBatis的动态SQL、缓存、插件等功能,提升开发效率和应用性能。
利用JAVA代理Proxy机制实现spring对ibaits的MapperScannerConfigurer功能 详细:http://blog.csdn.net/wq105032007067/article/details/8812598
ibaits2.3.0.chm
在XML格式的配置文件中,你可以定义SQL查询、存储过程、参数映射和结果集映射。 2. 映射器接口与XML映射文件:Ibatis通过映射器接口和对应的XML映射文件实现业务逻辑与SQL的解耦。接口定义了方法,而XML文件中则...
在IT行业中,SSI(Struts2、...通过这样的整合,开发者可以构建出高效、可维护的Web应用,并利用分页功能提高用户体验。对于初学者而言,理解并掌握这三个框架的整合和分页实现,是提升技能和解决实际问题的重要步骤。
struts1.2 +spring2.5 +ibaits2.0 框架整合,jndi获取数据源,简单易读
iBatis 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。将Spring MVC与iBatis结合使用,可以实现灵活的数据访问和高效的Web应用开发。 在Spring MVC中,核心组件包括DispatcherServlet、Model、...
在多数情况下不及特定数据库支持的物理分页,而hibernate的分页则是直接组装sql,充分利用了特定数据库的分页机制,效率相 对较高。本文讲述的就是如何在不重新编译ibatis源码的前提下,为ibatis引入hibernate式的...
Ibaits2.2帮助文档(英文),API 文档