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

iBatis调用存储过程的方法

阅读更多

为了方便我们经常需要函数/过程返回结果集时采用返回cursor的方式得到结果集,在ibatis以前版本中支持的不是很好,   

现在最新版本已经可以支持的很好了.   

一.下载最新ibatis包.   

二.最新的连接oracle 10g的驱动ojdbc(我这里用的是oracle 10g)   

三.下载最新的common包.   

示例如下:   

函数定义:   

CREATE OR REPLACE FUNCTION GetCurTest(    

    param1        in    varchar2;    

    param2          in    varchar2;    

)return SYS_REFCURSOR    

IS    

    outCursor SYS_REFCURSOR; --输出的游标    

BEGIN    

    open outCursor for    

          select ORGANCODE from testTable where col1 = GetCurTest.param1 and col2 = GetCurTest.param2;    

        return outCursor;    

END;-- 注意这里用的是SYS_REFCURSOR,在oracle10g里面提供的.    

 

ibatis中调用如下:   

<typeAlias alias="corp" type="com.wes.model.Corp" />   

<resultMap id="corp-map" class="corp">   

    <result property="corpNo" column="ORGANCODE" />   

</resultMap>   

<parameterMap id="test" class="java.util.HashMap" >     

    <parameter property="result" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="corp-map" />   

    <parameter property="param1" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>     

    <parameter property="param2" jdbcType="Date" javaType="java.util.Date" mode="IN"/>     

</parameterMap>   

<procedure id="testCur" parameterMap="test">     

    {? = call GetCurTest(?, ?)}     

</procedure>

 

 

java中调用如下:

String resource = "SqlMapConfig.xml";    

 SqlMapClient client = null;    

 try...{    

    Reader reader = Resources.getResourceAsReader(resource);    

    client = SqlMapClientBuilder.buildSqlMapClient(reader);    

    }catch (Throwable e)...{}    

Map p = new HashMap();    

p.put("param1","a");    

p.put("param2","b");    

client.queryForObject(mapid, p);    

List list = (List) p.get("result");    

if (list == null || list.size() == 0)    

   list = new ArrayList();    

return list;    

 

 

 list存放的就是我们要的结果集.   

 

4.Procedure    

procedure 元素支持存储过程。大部分存储过程要一些类似IN, INOUT 或者 OUT 的参数。所以,创建一个 <parameterMap> 元素并列出你要向存储过程传递的参数。只有当参数类型为OUT或者INOUT时parameterMap 对象才会被改变。   

  

<parameterMap id="swapParameters" class="map" >   

 <parameter property="contactId" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN"/>   

 <parameter property="firstName" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>     

 <parameter property="lastName" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>   

</parameterMap>   

   

<procedure id="swapContactName" parameterMap="swapParameters" >   

{call swap_contact_name (?, ?,?)}    

</procedure>   

 

  

你的代码一开始就要创建一个你要传递给存储过程的参数的 HashMap ,然后把它和你要执行的查询的名称一同传递给 sqlMap 。   

  

HashMap paramMap = new HashMap();    

paramMap.put("contactId", new Integer(1));    

paramMap.put("firstName", "Sunil");    

paramMap.put("lastName", "Patil");    

sqlMap.queryForObject("swapCustomerName", paramMap);     

 

  

5.Calling an Oracle procedure function using Ibatis    

  

The ibatis documentation provides a sample on how to call a procedure, but how do you call a function in Oracle? The code sample shows it.    

<parameterMap id="getSomeFunction" class="java.util.Map" >     

<parameter property="question1" jdbcType="INTEGER" javaType="java.lang.String" mode="OUT"/>     

<parameter property="question2" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>     

<parameter property="question3" jdbcType="INTEGER" javaType="java.lang.String" mode="IN"/>     

<parameter property="question54" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>     

<parameter property="question5" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>     

</parameterMap>   

   

<procedure id="getSomeFunction" parameterMap="getSomeFunction">     

{? = call FNC_EXECUTE_SOME_FUNCTION(?, ?, ?, ?)}     

   

 

分享到:
评论
2 楼 wpf523 2013-03-10  
不错哈,可以参考一下

1 楼 wei5201 2011-06-16  
感谢! 不错的文章,详细说明了ibatis2版本是如何调用存储过程的.

相关推荐

    ibatIS调用存储过程

    ibatIS调用存储过程是数据库操作中常见的一种技术,特别是在复杂的业务逻辑处理或数据批量操作时,存储过程能够提供更高的效率和更好的性能。本文将深入探讨如何在ibatIS框架中调用存储过程,以及涉及到的相关知识点...

    IBATIS调用存储过程

    首先,理解iBATIS调用存储过程的基本原理。iBATIS允许开发者在映射文件中定义存储过程调用,通过`&lt;procedure&gt;`标签来实现。在这个例子中,我们看到一个名为`P_DJ_GETRYANDPYRBYRYID`的存储过程被调用,它接受三个...

    ibatis调用存储过程

    在Java开发中,iBATIS(现在被称为MyBatis)是一个流行的数据持久层框架,它允许开发者将SQL语句直接嵌入到Java代码中,从而简化数据库操作。...希望这个示例能帮助你更好地理解iBATIS调用存储过程的方法。

    ibatis调用存储过程介绍

    本文将详细介绍如何使用iBATIS调用存储过程,并提供一个简单的示例来说明其过程。 首先,我们需要在数据库中创建一个存储过程。以下是一个Oracle数据库中的存储过程示例: ```sql CREATE OR REPLACE PROCEDURE pp ...

    ibatis调用存储过程.txt

    根据提供的文件信息,标题为“ibatis调用存储过程”,主要关注的是如何使用ibatis框架来调用数据库中的存储过程。下面将详细解释ibatis框架的基本概念、存储过程的概念以及如何在ibatis中配置和执行存储过程。 ### ...

    iBatis调用存储过程

    iBatis调用存储过程

    ibatis调用oracle存储过程分页

    ibatis调用oracle存储过程分页

    Ibatis调用存储过程调用存储过程

    本文将围绕“Ibatis调用存储过程”这一主题展开讨论,旨在帮助读者理解并掌握在Ibatis中调用存储过程的方法。 #### 二、存储过程与Ibatis简介 ##### 2.1 存储过程简介 存储过程是一种在数据库中预先编译好的SQL...

    ibatis调用oracle存储过程

    最后,在Java代码中,通过ibatis的Session对象调用存储过程,传入必要的参数,处理返回的结果集。 ```java SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources....

    ibatis调存储过程返回游标

    本文将深入探讨如何使用iBatis调用存储过程并返回游标,这是一个在处理复杂数据库操作时常见的需求。 ### iBatis调用存储过程返回游标 #### 存储过程简介 存储过程是预先编译并存储在数据库中的SQL代码块,它可以...

    IBatis查删改查与调用存储过程 mysql数据库

    "IBatis查删改查与调用存储过程 mysql数据库" 这个标题揭示了本文将深入探讨如何使用IBatis框架在MySQL数据库中执行基本的CRUD(创建、读取、更新、删除)操作,以及如何调用存储过程。IBatis是一个轻量级的Java持久...

    Ibatis调用Oracle存储过程返回自定义类型

    #### 使用Ibatis调用存储过程 Ibatis是一个Java持久层框架,它能够简化Java应用程序与数据库之间的交互。为了调用上述存储过程并正确处理返回值,我们需要进行以下配置: ##### 日志配置(log4j.properties) ```...

    ibatis调用oracle的函数,存储过程的方法

    调用存储过程: ```java Map, Object&gt; params = new HashMap(); params.put("id", id); sqlSession.execute("updateEmployeeStatus", params); String status = (String) params.get("status"); ``` 5. **...

    ibatis调用oracle的函数,存储过程的方法 IN 和OUT /游标

    本篇文章将详细探讨如何在iBatis中调用Oracle的函数和存储过程,尤其是处理IN和OUT参数以及游标的场景。 首先,我们需要了解iBatis的基本工作原理。iBatis是一个SQL映射框架,它允许开发者将SQL语句写在XML配置文件...

    ibatis与存储过程(带输出参数的应用)

    在实际项目中,使用Ibatis调用存储过程时,还应注意以下几点: 1. 不同的数据库系统可能有不同的存储过程调用语法,如Oracle、MySQL、SQL Server等,需要根据具体数据库进行调整。 2. 存储过程中的输出参数在Java...

    J2EE+Spring+Ibatis2+blazeds存储过程调用返回结果集

    在这个项目中,我们结合了Spring框架、Ibatis持久层框架以及Blazeds技术,来演示如何调用存储过程并处理返回的结果集。下面将详细讲解这些技术的运用。 首先,J2EE是一种广泛用于开发分布式企业应用的平台,它提供...

    ibatis官方中文文档

    学习这两份文档,开发者不仅可以理解iBATIS的基本工作原理,还能掌握如何高效地利用iBATIS调用存储过程,提高数据库操作的灵活性和性能。对于Java开发者,尤其是从事Web应用开发的人员,深入理解和熟练运用iBATIS是...

    ibatis增删查改,存储过程调用

    本篇文章将深入探讨如何在Ibatis中实现增、删、查、改(CRUD)操作,并调用存储过程,同时涉及相关的表结构设计。 首先,Ibatis通过XML配置文件或注解方式定义了SQL语句,允许我们编写动态SQL,以适应不同的查询...

    IBatis中的存储过程应用实例

    在IT行业中,数据库操作是不可或缺的一部分,而IBatis作为一款流行的数据映射框架,提供了一种灵活的方式来处理SQL语句,包括调用存储过程。存储过程是数据库中预编译的SQL语句集合,可以提高性能、增强安全性,并...

Global site tag (gtag.js) - Google Analytics