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

原创 2008年04月30日 21:07:00

 

全部是针对Microsoft SQL Server 2000的Stored Procedure的例子:
参照《iBATIS in Action》书写:
1.   max_in_example
Stored Procedure:

CREATE PROCEDURE [dbo].[max_in_example]
@a INTEGER = 0 OUTPUT,
@b INTEGER = 0 OUTPUT,
@c INTEGER = 0 OUTPUT
AS
 
BEGIN
       IF (@a > @b)
              SET @c = @a
       ELSE
              SET @c = @b
       RETURN @c
END
GO

 
SqlMap:

<parameterMap id="pm_in_example" class="java.util.Map">
       <parameter property="c" javaType="int" jdbcType="INTEGER"
           mode="OUT" />
       <parameter property="a" javaType="int" jdbcType="INTEGER" />
       <parameter property="b" javaType="int" jdbcType="INTEGER" />
 
 
    </parameterMap>
    <procedure id="in_example" parameterMap="pm_in_example"
       resultClass="int">
       { ? = call max_in_example(?, ?) }
    </procedure>

 
Java Code:

publicstatic Integer getMax_in_example(int a, int b) throws SQLException {
    Map<String, Integer> m = new HashMap<String, Integer>(2);
    m.put("a", new Integer(a));
    m.put("b", new Integer(b));
    m.put("c", new Integer(0));
    //执行存储过程in_example
    sqlMapper.queryForObject("in_example", m);
   
    return m.get("c");
}

 
2.   swap
Stored Procedure:

CREATE PROCEDURE [dbo].[swap]
@a INTEGER OUTPUT,
@b INTEGER OUTPUT
 
AS
 
BEGIN
       DECLARE @temp INTEGER
 
       SET @temp = @a
       SET @a = @b
       SET @b = @temp
END
GO

 
SqlMap:

    <parameterMap id="swapProcedureMap" class="java.util.Map">
       <parameter property="a" javaType="int" jdbcType="INTEGER"
           mode="INOUT" />
       <parameter property="b" javaType="int" jdbcType="INTEGER"
           mode="INOUT" />
    </parameterMap>
    <procedure id="swapProcedure" parameterMap="swapProcedureMap">
       { call swap(?, ?) }
    </procedure>

 
Java Code:

publicstatic Map swap(int a, int b) throws SQLException {
    Map<String, Integer> m = new HashMap<String, Integer>(2);
    m.put("a", new Integer(a));
    m.put("b", new Integer(b));
   
    //执行存储过程swap
    sqlMapper.queryForObject("swapProcedure", m);
   
    return m;
}

 
3.   maximum
Stored Procedure:

CREATE PROCEDURE [dbo].[maximum]
@a INT OUTPUT,
@b INT OUTPUT,
@c INT OUTPUT
 
AS
 
BEGIN
    IF(@a > @b)
         SET @c = @a
 
    IF(@b >= @a)
         SET @c = @b
END
GO

 
SqlMap:

<parameterMap id="maxOutProcedureMap" class="java.util.Map">
    <parameter property="a" mode="IN" />
    <parameter property="b" mode="IN" />
    <parameter property="c" jdbcType="INTEGER" mode="OUT" />
</parameterMap>
<procedure id="maxOutProcedure"parameterMap="maxOutProcedureMap">
       { call maximum (?, ?, ?) }
</procedure>

 
Java Code:

publicstatic Integer maximum(int a, int b) throws SQLException {
    Map<String, Integer> m = new HashMap<String, Integer>(2);
    m.put("a", new Integer(a));
    m.put("b", new Integer(b));
    m.put("c", new Integer(0));
   
    //执行存储过程maximum
    sqlMapper.queryForObject("maxOutProcedure", m);
           
    return m.get("c");
}

 
以上的Java Code类方法都是写在相应的ProcedureDAOImpl类中,可以通过ProcedureDAOImpl类调用相应得方法和传入对应参数来与数据库存储过程交互。
 
注意:在SqlMap.xml文件中<parameterMap>中参数的顺序跟<Procedure>中”?”的顺序一致。
如:a, b, c; ? = procedurename(?, ?) 则,第一个问号表示a,依次类推。

相关文章推荐

mybatis 调用存储过程 包含输入输出参数多结果集

一、首先定义存储过程,数据库环境mysql

jpa入门案例

1.1.  新建一个java工程jpaDemo1 1.2.  在工程下新建一个lib文件夹,用来存放jar包 1.3.  引入下面的jar包 所使用hibernat版本:hibernate-re...

Mybatis调用sqlserver2008存储过程

今天做工程时,用户提到了一个需求,要求对项目表(PM)中的项目填加删除功能, 不但要对主表删除,还要对子表1、子表2进行级联删除,在数据库没有使用级联删除约束,我用的数据库是sqlserver2005...

MyBatis调用带有返回结果、output参数的存储过程上与ibatis的区别

用过mybatis的应该都知道它是ibatis被Google收购后重新命名的一个工程,因此也做了大量升级。本文就来介绍下两者在调用存储过程上的一点区别,ibatis有一个专门的标签,在mybatis里...
  • hj7jay
  • hj7jay
  • 2017年07月19日 09:41
  • 524

asp.net调用输出参数存储过程

  • 2011年06月29日 11:38
  • 3KB
  • 下载

带TOP参数的存储过程

  • 2011年04月17日 21:20
  • 949B
  • 下载

Oracle带输入输出参数的存储过程

原文链接:http://blog.itpub.net/29485627/viewspace-1248721/ (一)使用输入参数 需求:在emp_copy中添加一条记录,empno为已有empno...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ibatis与存储过程(带输出参数的存储过程)
举报原因:
原因补充:

(最多只允许输入30个字)