ibatis 调用存储过程(2)
http://blog.csdn.net/fy_kenny/archive/2008/04/30/2350586.aspx
?
全部是针对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" 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"
?????? resultjavaType="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" 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,依次类推。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fy_kenny/archive/2008/04/30/2350586.aspx