入参有List

1、xml
<parameterMap id="newFailMap" class="java.util.HashMap">
    <parameter property="returnUserId" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"></parameter>
    <parameter property="businessRetrunDesc" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"></parameter>
    <parameter property="detailList" jdbcType="ARRAY" javaType="java.util.List" mode="IN"
               typeHandler="com.sinolife.claim.basic.dto.ImageFailedDetailVinArrayTypeHandler"/>
    <parameter property="flag" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"></parameter>
    <parameter property="message" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"></parameter>                        
</parameterMap>    
<procedure id="newFail" parameterMap="newFailMap">
  { call l_claim_public_pkg.add_image_failed_info(?,?,?,?,?) }
</procedure>

2、java
public void newFail(HashMap pMap) {
    getSqlMapClientTemplate().queryForList(FailDao.class.getName()+".newFail", pMap);
}

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
import com.ibatis.sqlmap.engine.type.BaseTypeHandler;
import com.ibatis.sqlmap.engine.type.TypeHandler;
import com.sinolife.claim.basic.util.CommonFunctions;
import com.sinolife.sf.framework.comm.ConnectionUtil;
 
public class ImageFailedDetailVinArrayTypeHandler extends BaseTypeHandler implements TypeHandler {
 
    @Override
    public Object getResult(ResultSet arg0, String arg1) throws SQLException {
        return null;
    }
 
    @Override
    public Object getResult(ResultSet arg0, int arg1) throws SQLException {
        return null;
    }
 
    @Override
    public Object getResult(CallableStatement arg0, int arg1) throws SQLException {
        return null;
    }
 
    /**
     * 构造Oracle能识别的Array
     */

    @Override
    public void setParameter(PreparedStatement ps, int i, Object parameter, String jdbcType) throws SQLException {
        // 本连接池连接
        Connection con = ps.getConnection();
        // 获取原生Oracle 连接
        con = ConnectionUtil.getNativeConnection(con);
        ArrayList<ImageFailedDetailDto> list = (ArrayList<ImageFailedDetailDto>) parameter;
        ARRAY array;
        try {
            array = getArray(con, "IMAGCDE.IMAGE_FAILED_DETAILE_OBJ""IMAGCDE.IMAGE_FAILED_DETAILE_LIST",list);
            ps.setArray(i, array);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    /**
     * 创建oracle中的Array
     * @param con
     * @param OracleObj
     * @param Oraclelist
     * @param listData
     * @return
     * @throws Exception
     */

    private ARRAY getArray(Connection con, String OracleObj, String Oraclelist, List<ImageFailedDetailDto> listData) throws Exception {
        ARRAY array = null;
        ArrayDescriptor desc = ArrayDescriptor.createDescriptor(Oraclelist, con);
        StructDescriptor structdesc = new StructDescriptor(OracleObj, con);
        if (listData != null && listData.size() > 0) {
 
            STRUCT[] structs = new STRUCT[listData.size()];
            for (int i = 0; i < listData.size(); i++) {
                Object[] result = { (listData.get(i)).getDocumentId(),
                                    CommonFunctions.isEmpty((listData.get(i)).getReturnUserId())?"":(listData.get(i)).getReturnUserId(),
                                    (listData.get(i)).getReturnTime(),
                                    "",
                                    "",
                                    CommonFunctions.isEmpty((listData.get(i)).getReturnReason())?"":(listData.get(i)).getReturnReason(),
                                    CommonFunctions.isEmpty((listData.get(i)).getBusinessRetrunDesc())?"":(listData.get(i)).getBusinessRetrunDesc(),
                                    CommonFunctions.isEmpty((listData.get(i)).getFileId())?"":(listData.get(i)).getFileId(),
                                    CommonFunctions.isEmpty((listData.get(i)).getImage())?"":(listData.get(i)).getImage()
                                  };
                structs[i] = new STRUCT(structdesc, con, result);
            }
            array = new ARRAY(desc, con, structs);
        }
        return array;
    }
 
    @Override
    public Object valueOf(String arg0) {
        return null;
    }
}

3、pkg
PROCEDURE add_image_failed_info(p_return_user_id         IN   VARCHAR2,
                                p_business_retrun_desc   IN   VARCHAR2,
                                p_image_faild_detail_lst IN   IMAGCDE.IMAGE_FAILED_DETAILE_lIST,
                                p_flag                   OUT  VARCHAR2,
                                p_message                OUT  VARCHAR2)
IS
  v_image_failed_obj    IMAGCDE.IMAGE_FAILED_OBJ;
BEGIN
  p_flag := 'Y';
  v_image_failed_obj := IMAGCDE.IMAGE_FAILED_OBJ(p_return_user_id,
                                                 'N',
                                                 p_business_retrun_desc,
                                                 p_image_faild_detail_lst);
  l_image_claim_interface.add_image_failed_info(v_image_failed_obj,p_flag,p_message);
EXCEPTION
  WHEN OTHERS THEN
    DECLARE
       v_error_code      VARCHAR2 (4000);
       v_comments        VARCHAR2 (4000);
       v_program_id      VARCHAR2 (50) := 'add_image_failed_info';
       v_error_message   VARCHAR2 (4000);
    BEGIN
       v_error_code := NULL;
       v_comments := NULL;
       pub_error_handle.exception_no_raise(v_program_id,
                                           v_error_code,
                                           v_comments,
                                           v_error_message);
       p_flag := 'N';
       p_message := 'add_image_failed_info发生后台异常,具体原因请查看后台异常处理日志。';
    END;
END add_image_failed_info;










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值