读书人

iBatis高级应用(上)-存储过程返游标

发布时间: 2013-01-25 15:55:29 作者: rapoo

iBatis高级应用(下)--存储过程返游标

十:调用存储过程返回数据

iBatic调用与JAVA调用很类似,只是JAVA把参数的注册放到了类里面,而iBatis把参数的注册放到了XML配置文件里,下面两个例子,第一个是返回普通数据,第二个是返回游标。

1:返回普通数据:

Map map = new HashMap();map.put("username", "JACK");sqlMapClient.queryForObject("pro_test",map);System.out.println(map);输出结果:{o=NBA, ooo=1, oo=JACK, username=JACK}
<!--   存储过程 -->   <parameterMap id="pro_map">    <parameter property="username" javaType="String" jdbcType="VARCHAR" mode="INOUT"/>    <parameter property="o" javaType="String" jdbcType="VARCHAR" mode="OUT"/>    <parameter property="ooo" javaType="java.lang.Integer" jdbcType="INTEGER" mode="OUT"/>    <parameter property="oo" javaType="String" jdbcType="VARCHAR" mode="OUT"/></parameterMap><procedure id="pro_test" parameterMap="pro_map">       {call user_account_proc(?,?,?,?)}</procedure>
create or replace procedure user_account_proc(  uname in out varchar,  ugroupname out varchar,  uid out number,  ugro out varchar)asbegin  select groupname,username,userid into ugroupname,ugro,uid from user_account where username = uname;end;

?

2:返回一个游标:

Map map1 = new HashMap();sqlMapClient.queryForObject("pro_cursor",map1);System.out.println(map1.get("backcursor"));输出结果:[{userid=1, username=JACK, userpwd=BEIJING, groupname=NBA},{userid=2, username=TOM, userpwd=SHANGHAI, groupname=NBA},{userid=3, username=MARY, userpwd=SHANGHAI, groupname=IBM}]

配置文件:

   <resultMap id="backmap">       <result property="userid" column="USERID"/>       <result property="username" column="USERNAME"/>       <result property="userpwd" column="USERPWD"/>       <result property="groupname" column="GROUPNAME"/>    </resultMap>    <parameterMap id="pro_cursor_map">       <parameter property="backcursor" javaType="java.sql.ResultSet"                  jdbcType="ORACLECURSOR" mode="OUT" resultMap="backmap"/>    </parameterMap>    <procedure id="pro_cursor" parameterMap="pro_cursor_map">       {call user_account_proc1(?)}    </procedure>

?

过程:

create or replace procedure user_account_proc1(  my_cursor out sys_refcursor)asbegin  open my_cursor for select * from user_account;end;?

读书人网 >软件架构设计

热点推荐