ibatis3.X如何调用Oracle存储过程定义的in数组

harryzyp 2011-01-25 08:38:24
oracle定义数组:
CREATE OR REPLACE TYPE voucher_distribute_list as table of voucher_distribute;

CREATE OR REPLACE TYPE voucher_distribute AS OBJECT
(
name VARCHAR2(100),
code VARCHAR2(10)
);

ibatis3 如何调用存储过程定义了in输入参数的voucher_distribute_list
非常感谢
...全文
839 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

package org.yhb.ibatis.model;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable{
private static final long serialVersionUID = -6919964218508186044L;
private int id;
private String name;
private Date birthday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}


<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD iBatis Mapper 3.0 //EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="org.yhb.ibatis.dao.UserDAO">
<!-- 表结构
create table IBATIS_USER
(
ID NUMBER not null,
NAME VARCHAR2(20) not null,
BRITHDAY DATE not null
)
-->

<!-- 存储过程
create or replace procedure getAllUser(userList out sys_refcursor)
as
begin
open userList for select * from ibatis_user;
end;
-->

<!-- resultMap -->
<resultMap type="User" id="userMap">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="birthday" property="birthday" />
</resultMap>

<!-- 调用存储过程 -->
<select id="getAllUser" statementType="CALLABLE">
{call
getAllUser(#{userList,<!-- 参数 -->
mode=OUT,<!-- 参数类型 -->
javajavaType=java.sql.ResultSet,<!-- 参数java类型 -->
jdbcType=CURSOR,<!-- 参数jdbc类型 -->
resultMap=userMap<!-- ResultSet需要resultMap参数 -->
})}
</select>
</mapper>


@Test
public void testProcedure() throws Exception {
Reader reader = null;
reader = Resources.getResourceAsReader("configuration.xml");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
reader.close();

SqlSession session = ssf.openSession();
Map map = new HashMap();
session.selectOne("org.yhb.ibatis.dao.UserDAO.getAllUser", map);
System.out.println(map);
//返回的集合被放入了map中
List<User> userList = (List<User>) map.get("userList");
System.out.println(userList);
session.close();
}





希望对你有帮助
harryzyp 2011-01-26
  • 打赏
  • 举报
回复
不是简单调用存储过程,是这个存储过程有个in参数的数组
xieshengjun2009 2011-01-26
  • 打赏
  • 举报
回复
持久层实现类:
public String dealPay(HashMap map) {
this.getSqlMapClientTemplate().queryForObject("CM_BILL.dealpay", map);
return map.get("rslt_str").toString();
}

sqlMap.xml文件:
<parameterMap class="java.util.Map" id="p-dealpay">

<parameter javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT" property="rslt_str" />
<parameter javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" property="begin_date_i" />
<parameter javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" property="end_date_i" />
<parameter javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" property="branch_i" />
<parameter javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" property="customer_type_i" />
</parameterMap>

<procedure id="dealpay" parameterMap="p-dealpay">
{call F_rep_get_billmonth(?,?,?,?)}
</procedure>


这些已经足够可以让你知道怎么调用存储过程了。其他的你在发挥发挥!
harryzyp 2011-01-26
  • 打赏
  • 举报
回复
你这个是out参数的,还不符合要求,但也非常感谢了

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧