Mybatis 调用存储过程(SP)

本文详细解析了MyBatis中XML配置文件的使用方法,包括存储过程调用、参数映射及结果映射,展示了如何在Service层通过Mapper接口调用这些配置,实现数据的查询、插入与更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

xml 中的代码

	<select id="getData" statementType="CALLABLE" parameterType="Map">
		{
			call schamename.spname(
			#{p_ISN, mode=IN, jdbcType=VARCHAR},
			#{p_DB, mode=IN, jdbcType=VARCHAR},
			#{p_CUR_RESULT, mode=OUT, jdbcType=CURSOR, resultMap=cursorMap},
			#{p_RET, mode=OUT, jdbcType=INTEGER},
			#{p_MSG, mode=OUT, jdbcType=VARCHAR}
			)
		}
	</select>
	<resultMap  type ="java.util.HashMap" id= "cursorMap">
	     <result column ="ISN" property="ISN" />
	     <result column ="BUILD" property="BUILD" />
	     <result column ="APPLEP_N" property="APPLEP_N" />
	</resultMap >

	<select id="insertLog" statementType="CALLABLE" parameterType="HashMap">
		{
			call schamename.spname(
				#{P_USERID, mode=IN, jdbcType=VARCHAR},
				#{P_CLIENT_IP, mode=IN, jdbcType=VARCHAR},
				#{P_HOSTNAME, mode=IN, jdbcType=VARCHAR},
				#{P_PROJECT_CODE, mode=IN, jdbcType=VARCHAR},
				#{P_SERVER_IP, mode=IN, jdbcType=VARCHAR},
				#{P_URL, mode=IN, jdbcType=VARCHAR},
				#{P_PAGENAME, mode=IN, jdbcType=VARCHAR},
				#{P_ACTION, mode=IN, jdbcType=VARCHAR},
				#{P_STARTIME, mode=IN, jdbcType=DATE},
				#{P_ENDTIME, mode=IN, jdbcType=DATE},				
				#{P_EXETIME, mode=IN, jdbcType=INTEGER},
				#{P_REQUEST_TYPE, mode=IN, jdbcType=INTEGER},
				#{P_SHOP, mode=IN, jdbcType=VARCHAR},
				#{P_RET, mode=OUT, jdbcType=INTEGER},
				#{P_MSG, mode=OUT, jdbcType=VARCHAR})
		}
	</select>
	<insert id="addData"  statementType="CALLABLE" parameterType="Map">
	{
		call schamename.spname(
			#{P_MO, mode=IN, jdbcType=VARCHAR},
			#{P_TQTY, mode=IN, jdbcType=INTEGER},
			#{P_OP, mode=IN, jdbcType=VARCHAR},
			#{P_RET, mode=OUT, jdbcType=INTEGER},
			#{P_MSG, mode=OUT, jdbcType=VARCHAR})
	}
	</insert>

service 中调用

@Override
	public String updateData(Map<String, Object> params,User user) throws Exception {
		
		String result = "";
		SqlSession session = null;
		try {
			String op = user.getUserID();
			String mo = params.remove("MO").toString().trim().toUpperCase();
			//传入的参数名必须与xml定义的参数名一致,xml又要与存储过程定义的保持一致
			params.put("P_MO", mo);
			Object tqty = params.remove("TQTY");
			params.put("P_TQTY", tqty);
			params.put("P_OP", op);
			session = SessionFactory.getSqlSession(user.getDbid());
			IORT_MaintainMapper mapper = session.getMapper(IORT_MaintainMapper.class);
			mapper.addData(params);
			//返回结果也是保存在传入的map中
			if ("0".equals(String.valueOf(params.get("P_RET"))))
			{
				result = ConstantList.getErrorStringAsMap("update mo: " + mo + " failed!Cause by: " + params.get("P_MSG"));
				return result;
			}
			session.commit();
			result = ConstantList.getSuccessStringAsMap(ConstantList.UPDATE_OK_RESULT);
			return result;
		} catch (Exception e) {
			e.printStackTrace();
			session.rollback();
			result = ConstantList.getSuccessStringAsMap(ConstantList.UPDATE_FAIL_RESULT);
			return result;
		} finally {
			if(session != null){
				session.close();
			}
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值