调试了半天,其实整体用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(); // 返回票号