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,依次类推。

ibatis对存储过程的调用

IBatis映射文件:  DAO层代码:public Integer hasAuth(String productCode...
  • hfhwfw
  • hfhwfw
  • 2010年05月05日 14:23
  • 7985

Oracle存储过程详解(四)-ibatis中调用

有一个”删除部门”的任务,删除部门的时候要先查看该部门是否还有员工,有员工就不能删除,没有就可以删除。 参考资料:普通存储过程(无集合的参数)1. 编写存储过程:--删除一个部门(返回false或0:...
  • wangxy799
  • wangxy799
  • 2016年04月21日 10:37
  • 1913

ibatis执行存储过程出现阻塞

在用ibatis调用mysql存储过程时,出现线程阻塞,但是存储过程中的数据插入却成功了,但是没有返回结果。 我写的存储过程执行了查询、添加、更新操作,并且返回一个int结果。 解决办法:...
  • puzzel110
  • puzzel110
  • 2016年12月21日 11:49
  • 366

java和ibatis调用存储过程并取得返回值

http://blog.csdn.net/jiandanfeng2/article/details/6609623 由于存储过程的一系列好处,比如减少sql语句的网络传输等等。使得很多开发人员喜欢...
  • it_taojingzhan
  • it_taojingzhan
  • 2016年04月25日 10:08
  • 3664

iBatis调用存储过程以及MySQL创建存储过程

完整版见https://jadyer.github.io/2014/05/29/ibatis-procedure/
  • jadyer
  • jadyer
  • 2014年05月29日 21:18
  • 1812

ibatis调用oracle的函数、存储过程的方法 in和out游标

1对于全部是in 类型的参数过程,采用下面的方法调用(ibatis版本是2.3) 比如过程:     Procedure Flashback_Op(v_table_owner Varcha...
  • sprita1
  • sprita1
  • 2012年04月17日 00:19
  • 3425

ibatis如何返回存储过程中的输出参数

ibatis会经常调用存储过程,有的有返回值有的是输出参数,下面是带输出参数的存储过程调用: java代码:HashMap paramMap = new HashMap(); par...
  • u011217058
  • u011217058
  • 2016年06月28日 16:25
  • 1006

ibatis 调用存储过程多个传入传出参数

bean: package com.yushh.model; import java.io.Serializable; public class InParam implements Ser...
  • Cages
  • Cages
  • 2012年06月19日 17:54
  • 3466

ibatis调用sqlserver存储过程

获取分页的每页结果存储过程CREATE PROCEDURE [dbo].[mst_sp_pageshowex4]  --输入参数     @qCols varchar(8000),          ...
  • jethai
  • jethai
  • 2016年08月28日 14:07
  • 727

ibatis通过Map封装参数调用存储过程

ibatis调用存储过程
  • tongge01uuu
  • tongge01uuu
  • 2013年07月17日 14:15
  • 2969
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ibatis与存储过程(带输出参数的存储过程)
举报原因:
原因补充:

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