`
tobackfurture
  • 浏览: 2189 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

利用存储过程分页,与ibaits集合实例

阅读更多
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
分享到:
评论

相关推荐

    ibaits完整实例+jar包+详细学习文档

    最近没事儿写了个ibatis最完的例子,这个东西很好用,也很灵活。里面附带了ibatis详细学习文档,各种需要的jar包,最主要是有一个实用的例子,下载下来后在自己的机器上创建数据库建个表,修改一下配置就可以直接...

    spring+struts+ibaits实例.zip

    这个"spring+struts+ibaits实例.zip"压缩包提供了一个经典的实例,帮助开发者理解这三大框架如何协同工作。下面我们将深入探讨这三个框架的核心概念、功能以及它们在实际项目中的整合方式。 **Spring框架** Spring...

    ibaits 简单实例

    Ibatis的主要目标是简化SQL与Java对象之间的绑定过程,提供更为灵活的数据库操作方式。 二、Ibatis的核心组件 1. XML配置文件:Ibatis的主要配置文件,包括数据源、事务管理器以及映射文件的引入等,是连接数据库...

    struts+spring_ibaits+调用Mysql存储过程实现增删改查

    在本项目中,"struts+spring_ibaits+调用Mysql存储过程实现增删改查",意味着开发者利用这三个框架来处理数据库中的增、删、改、查(CRUD)操作,并通过调用MySQL的存储过程来实现这些功能。存储过程是预编译的SQL...

    ibaits例子

    Ibatis,全称为MyBatis-iBatis,是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Ibatis消除了几乎所有的JDBC代码和参数手动设置以及结果集的检索。Ibatis可以被用来作为JDBC的替代品,解决了JDBC...

    ibaits2.3.4源代码

    不久也会发表SSI(Spring2.5+Struts2+Ibaits)整合配置的系列文章。?????? 该篇主要描述所需jar文件以及编写数据库连接部分。需要的jar文件有数据库连接相关jar文件如下:commons- dbcp.jarcommons-logging.jarcommons...

    Ibaits例子与PPT

    【标题】:“Ibaits例子与PPT” 【描述】:本资料主要涵盖了关于Ibatis的相关知识,通过一个具体的myeclipse工程实例来深入解析Ibatis的使用,同时结合PPT的形式,使得学习过程更加直观易懂。Ibatis是一个优秀的...

    ibatis指导和spring常用项目实例.part1.rar

    ibatis指导和spring常用项目实例.part1.raribatis指导和spring常用项目实例.part1.rar

    springboot ibaits mysql整合

    1. **Spring Boot**:Spring Boot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它预设了各种默认配置,使得开发者可以快速上手,同时提供了一种“约定优于配置”的开发模式。Spring ...

    ibatis调用oracle存储过程

    在IT领域,特别是数据库操作与Java开发中,利用ibatis框架调用Oracle存储过程是一个常见的需求,这不仅能够提升代码的执行效率,还能增强应用程序的安全性。本文将深入解析ibatis如何与Oracle数据库中的存储过程进行...

    ibaits例子曾删改

    本文将以“ibaits例子曾删改”为主题,深入探讨如何利用Ibatis进行数据的增删改查(CRUD)操作。我们将从基础概念入手,逐步解析Ibatis的核心组件,通过实例演示具体步骤,帮助初学者快速上手。 Ibatis,全称为...

    springboot ibaits mysql整合 01

    通过这种方式,你可以轻松地在Spring Boot应用中管理数据库操作,同时利用iBatis的灵活性和强大功能。在实际开发中,你还可以进一步探索MyBatis的动态SQL、缓存、插件等功能,提升开发效率和应用性能。

    利用JAVA代理Proxy机制实现spring对ibaits的MapperScannerConfigurer功能

    利用JAVA代理Proxy机制实现spring对ibaits的MapperScannerConfigurer功能 详细:http://blog.csdn.net/wq105032007067/article/details/8812598

    ibaits2.3.0.chm

    ibaits2.3.0.chm

    ibaits源码以及样例

    在XML格式的配置文件中,你可以定义SQL查询、存储过程、参数映射和结果集映射。 2. 映射器接口与XML映射文件:Ibatis通过映射器接口和对应的XML映射文件实现业务逻辑与SQL的解耦。接口定义了方法,而XML文件中则...

    ssi整合开发包括分页

    在IT行业中,SSI(Struts2、...通过这样的整合,开发者可以构建出高效、可维护的Web应用,并利用分页功能提高用户体验。对于初学者而言,理解并掌握这三个框架的整合和分页实现,是提升技能和解决实际问题的重要步骤。

    struts+spring+ibaits

    struts1.2 +spring2.5 +ibaits2.0 框架整合,jndi获取数据源,简单易读

    springmvc+ibaits示例

    iBatis 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。将Spring MVC与iBatis结合使用,可以实现灵活的数据访问和高效的Web应用开发。 在Spring MVC中,核心组件包括DispatcherServlet、Model、...

    spring-ibatis-ext-plugin.1.0.0 扩展ibaits原生SQL

    在多数情况下不及特定数据库支持的物理分页,而hibernate的分页则是直接组装sql,充分利用了特定数据库的分页机制,效率相 对较高。本文讲述的就是如何在不重新编译ibatis源码的前提下,为ibatis引入hibernate式的...

    Ibaits2.2帮助文档(英文)

    Ibaits2.2帮助文档(英文),API 文档

Global site tag (gtag.js) - Google Analytics