myBatis调存储过程(有参数有返回值)

1.存储过程(表单升级)

create or replace procedure getMachineUpateVersionProc(new_id       in varchar2,//输入参数
                                                       pre_id       in varchar2,//输入参数
                                                       new_version  in varchar2,//输入参数
                                                       new_formCode in varchar2,//输入参数
                                                       createUser   in varchar2,//输入参数
                                                       resultStr    out varchar2//返回值
                                                       ) is
begin
      declare currentDate date;
 begin
     select sysdate into currentDate from dual;

     insert into test_task_info(ID,CREATE_BY,CREATE_DATE,UPDATE_BY,UPDATE_DATE,VERSION,START_TYPE,FORM_STATE,TEST_TASK_CODE,TEST_TASK_NAME,TEST_TASK_TYPE,PRODUCT_RANGE,PRODUCT_USE,TEST_STAGE,TEST_EXCUTER,TEST_BENCH,TEST_BENCH_LOG,REMARKS,DEL_FLAG,ENGINE_TYPE,sort) select new_id,createUser,currentDate,createUser,currentDate,new_version,'01','01',TEST_TASK_CODE,TEST_TASK_NAME,TEST_TASK_TYPE,PRODUCT_RANGE,PRODUCT_USE,TEST_STAGE,TEST_EXCUTER,TEST_BENCH,TEST_BENCH_LOG,REMARKS,DEL_FLAG,ENGINE_TYPE,SEQ_TASK_SORT.Nextval from test_task_info where id = pre_id;

     insert into machine_form_info (id, remarks, create_by, create_date, update_by, update_date,form_code,test_task_id, test_name, project_name, work_order, project_leader, product_use, now_state, dvp_code, suggest_time, background_remark, test_purpose, engine_type, engine_bom_code, engine_bom_version, ecu_no, engine_tech, engine_all_tech, engine_out_tech, engine_remark, check_detail, measure_param, special_demand, install_comp_node, test_fuel_no, test_oil_no, antifreeze, test_item1, test_item2, TEST_REQUIRE1, TEST_REQUIRE2, test_comp_node, after_measure_detail, important_parts, other_detail, form_version, extend_1, extend_2, extend_3, extend_4, extend_5, del_flag, exam_type, task_source, work_oder2, design_leader, dvp_code2, USE_MEASURE_PARAM, DURABLE_MEASURE_PARAM, product_range, project_code, project_grade) select (select sys_guid() from dual) as id, remarks, createUser, currentDate, createUser, currentDate,new_formCode, new_id, test_name, project_name, work_order, project_leader, product_use, now_state, dvp_code, suggest_time, background_remark, test_purpose, engine_type, engine_bom_code, engine_bom_version, ecu_no, engine_tech, engine_all_tech, engine_out_tech, engine_remark, check_detail, measure_param, special_demand, install_comp_node, test_fuel_no, test_oil_no, antifreeze, test_item1, test_item2, TEST_REQUIRE1, TEST_REQUIRE2, test_comp_node, after_measure_detail, important_parts, other_detail, form_version, extend_1, extend_2, extend_3, extend_4, extend_5, del_flag, exam_type, task_source, work_oder2, design_leader, dvp_code2, USE_MEASURE_PARAM, DURABLE_MEASURE_PARAM, product_range, project_code, project_grade from machine_form_info where test_task_id = pre_id;

     insert into machine_form_assign ( id, create_by, create_date, update_by, update_date, assign_no, assign_type, parts_name, parts_no, factory, batch, design_major, assign_time, follow, test_task_id, extend_1, extend_2, extend_3, extend_4, extend_5, remarks, del_flag ) select (select sys_guid() from dual) as id, createUser, currentDate, createUser, currentDate, assign_no, assign_type, parts_name, parts_no, factory, batch, design_major, assign_time, follow, new_id, extend_1, extend_2, extend_3, extend_4, extend_5, remarks, del_flag from machine_form_assign WHERE test_task_id =pre_id and del_flag = '0';

     insert into machine_form_measure (  id, create_by, create_date, update_by, update_date, test_task_id, measure_item_no, item_remark, form_version, extend_1, extend_2, remarks, del_flag ) select (select sys_guid() from dual) as id, createUser, currentDate, createUser, currentDate, new_id, measure_item_no, item_remark, form_version, extend_1, extend_2, remarks, del_flag FROM machine_form_measure a WHERE test_task_id = pre_id and del_flag = '0';

     insert into machine_form_bench_item ( id, create_by, create_date, update_by, update_date, test_task_id, per_bench_item_no, dur_bench_item_no, item_remark, form_version, extend_1, extend_2, remarks, del_flag ) select (select sys_guid() from dual) as id, createUser, currentDate, createUser, currentDate, new_id, per_bench_item_no, dur_bench_item_no, item_remark, form_version, extend_1, extend_2, remarks, del_flag FROM machine_form_bench_item a WHERE test_task_id =pre_id and del_flag = '0';

     COMMIT;
     resultStr := 'ok';

     EXCEPTION
         WHEN OTHERS THEN
             ROLLBACK;
         BEGIN
             resultStr:=sqlerrm;
             dbms_output.put_line('错误信息:'||resultStr);
         END;

 end;

end getMachineUpateVersionProc;

MyBatis是如何调用的

1.controller

public ReponseData updateVersion(String testTaskId,String preVersion) {
   try{
      String version = "";
      if(null==preVersion){
         version="A";
      }else{
         version =  String.valueOf((char)((int)preVersion.toCharArray()[0] + 1));
      }
      String formCode = machineFormInfoService.getFormCodeSeq();
      User currentUser = UserUtils.getUser();
      Map<String, Object> map = new HashMap<String, Object>(); //定义map,将所有的输入参数放进map
      String newId = IdGen.uuid();
      map.put("new_id",newId);
      map.put("pre_id", testTaskId);
      map.put("new_version", version);
      map.put("new_formCode", formCode);
      map.put("createUser", currentUser.getId());
      machineIndexService.getMachineUpateVersionProc(map); //调用service,间接调用存储过程
      String resultStr = (String) map.get("resultStr"); //获取存储过程执行结束后的返回值
      if ("ok".equals(resultStr)) {
         return new ReponseData.Builder(Constant.SUCCESS_CODE).message(newId).build();
      }else{
         logger.error("[错误信息]", resultStr);
         return new ReponseData.Builder(Constant.FAIl_CODE).message(Constant.FAIL_TIP).build();
      }
   }catch (Exception e){
      e.printStackTrace();
      return new ReponseData.Builder(Constant.FAIl_CODE).message(Constant.FAIL_TIP).build();
   }
}

2.service

public void getMachineUpateVersionProc(Map<String,Object> map){
   machineFormInfoDao.getMachineUpateVersionProc(map);
}

3.dao 

void getMachineUpateVersionProc(Map<String,Object> map);

4.xml应该这么写

<select id="getMachineUpateVersionProc" parameterType="java.util.Map" statementType="CALLABLE">
   <![CDATA[
             {call getMachineUpateVersionProc(#{new_id,mode=IN,jdbcType=VARCHAR},#{pre_id,mode=IN,jdbcType=VARCHAR},#{new_version,mode=IN,jdbcType=VARCHAR},#{new_formCode,mode=IN,jdbcType=VARCHAR},#{createUser,mode=IN,jdbcType=VARCHAR},#{resultStr,mode=OUT,jdbcType=VARCHAR})}
   ]]>
</select>

猜你喜欢

转载自my.oschina.net/u/3409039/blog/1579182