项目中有使用mybatis注解方式调存储过程.主要的坑点在接收返回值(list).
1:ServerImpl里面
//获取bom信息
Map<String,Object> params =new HashMap<String,Object>(3);
params.put("PN", PN);
params.put("projectCode", projectCode);
//1:试试直接接受返回值.结果是空的.
List<CtRunBomInfo> bomList = fileInfoByEdiMapper.queryBom(params);
System.out.println("bomList.size():"+bomList.size());
//1:试试map的第三个值接收,正确.
List<CtRunBomInfo> bomInfo = (List<CtRunBomInfo>) params.get("bomInfo");
System.out.println("bomInfo.size():"+bomInfo.size());
2:实体类CtRunBomInfo,省略set,get
private String maticPN;
private String ctRunBomSysId;
private String ctRunSysId;
private String pn;
private String pnDesc;
private String projectCode;
private String makerCode;
private String makerName;
private String makerPn;
private String status;
private BigDecimal weight;
private String uom;
private BigDecimal qvlId;
private BigDecimal gpId;
private BigDecimal profileId;
private Date creationTime;
private Date updateTime;
3:Mapper
mode=OUT这一行的bomInfo就对应serviceImpl层的map.get("bomInfo")
/**
* 根据输入的Pn和截取的projectCode作为参数获取零件Bom信息
* @param pN
* @param projectCode
* @return
*/
@Select({"call eGP_RPA_PKG.GET_OPEN_TASK("
+ "#{PN,mode=IN,jdbcType=VARCHAR},"
+ "#{projectCode,mode=IN,jdbcType=VARCHAR},"
+ "#{bomInfo,mode=OUT,jdbcType =CURSOR ,javaType=ResultSet,resultMap=bomInfo})"})
@Results(id = "bomInfo",
value = {
@Result(column = "TOP_PARENT_PN", property = "maticPN"),
@Result(column = "MITAC_PART_NO", property = "pn"),
@Result(column = "MITAC_PART_DESC", property = "pnDesc"),
@Result(column = "MAKER_CODE", property = "makerCode"),
@Result(column = "MAKER_NAME", property = "makerName"),
@Result(column = "MAKER_PN", property = "makerPn"),
@Result(column = "WEIGHT", property = "weight"),
@Result(column = "UOM", property = "uom"),
@Result(column = "QVL_ID", property = "qvlId"),
@Result(column = "GPID", property = "gpId"),
@Result(column = "PROFILE_ID", property = "profileId")
})
@Options(statementType=StatementType.CALLABLE)
public List<CtRunBomInfo> queryBom(Map<String,Object> params);
注意:@Options(statementType=StatementType.CALLABLE)
这个注解加上代表执行存储过程.不加会报丢失参数错误
参考的: