mybatis 调用oracle存储过程如何返回out参数值

调试了半天,其实整体用map传入传出也挺简单,

主要是调用存储过程 select标签里平时习惯不写 statementType="CALLABLE",调用没有out参数时也能正常用,

调用有out参数的过程时导致一直报java.sql.SQLException: 索引中丢失  IN 或 OUT 参数:: 6

网上的很多文章写的挺啰嗦,

parameterMap要是传入的就是HashMap里面也都是基本类型根本不用写,mabatis会自动识别类型。

jdbcType=INTEGER, mode=OUT也只需要给OUT参数写上,IN参数也不必要写。

每次看到网上的代码写了一堆<parameterMap id="canCustomerSubscribeParams" type="map">就感到无奈

 

dao接口定义:

void sellPassengerTicket(Map<String, Object> params);

mapper xml:

<select id="sellPassengerTicket" statementType="CALLABLE">
        CALL TicSell_SellPassengerTicket(#{p_ticketWindowId}, 
        #{p_planVoyageId},
        #{p_planBerthInfoId},
        #{p_discountTypeId},
        #{p_discountRate},
        #{p_ticketNumber, jdbcType=INTEGER, mode=OUT}
        )
    </select>

service层调用:

Map<String, Object> params = new HashMap<String, Object>();
        params.put("p_ticketWindowId", ticketWindowId);
        params.put("p_planVoyageId", planVoyageId);
        params.put("p_planBerthInfoId", planBerthInfoId);
        params.put("p_discountTypeId", discountTypeId);
        params.put("p_discountRate", discountRate);
        
        
        ticketSellDao.sellPassengerTicket(params);
        return params.get("p_ticketNumber").toString(); // 返回票号

 

posted @ 2017-11-10 09:07  老豆芽  阅读(1260)  评论(0编辑  收藏  举报