序文
ソフトウェア開発のプロセスではストアド プロシージャがよく使用されますが、この記事では SpringBoot+Mybatis を使用して SQL Server データベースのストアド プロシージャを呼び出し、ストアド プロシージャの戻りパラメータを取得する方法を説明します。
1.ストアドプロシージャの入力パラメータ
这是存储过程的入参,用于后续Mybatis的对应;
コードは次のとおりです(例)。
2. Mybatis での XML の記述
注意参数类型,以及参数的出入参设置;
コードは次のとおりです(例)。
<!--门诊充值-->
<select id="outpatientRecharge" parameterType="java.util.Map" statementType="CALLABLE" resultType="java.lang.String">
<![CDATA[
{
call SP_xcx_mzcz(
#{
cardNo, jdbcType=VARCHAR, mode=IN},
#{
cardtype, jdbcType=VARCHAR, mode=IN},
#{
payPlatform, jdbcType=VARCHAR, mode=IN},
#{
rechargeTime, jdbcType=VARCHAR, mode=IN},
#{
money, jdbcType=DECIMAL, mode=IN},
#{
serialNo, jdbcType=VARCHAR, mode=IN},
#{
meg, jdbcType=VARCHAR, mode=OUT},
#{
message, jdbcType=VARCHAR, mode=OUT}
)
}
]]>
</select>
3.Daoレイヤーコード
コードは次のとおりです(例)。
/**
* 门诊充值
* @param params 参数
* @return String
*/
String outpatientRecharge(Map<String, Object> params);
4. 【ポイント】サービス層の呼び出し
コードは次のとおりです(例)。
public JSONObject saveCurrencyPayStoredProcedureMapping(){
Map<String, Object> params = new HashMap<>();
params.put("cardNo","362330200010132058");
params.put("cardtype","1");
params.put("payPlatform","1");
params.put("rechargeTime","2023-07-31");
params.put("money","100");
params.put("serialNo","123123123");
//这里下面两个参数,就是存储过程的回参,当存储过程执行后会赋值到这个入参中的参数里面。后续打印可见内容,
params.put("meg","");
params.put("message","");
storeProcedureDao.outpatientRecharge(params);
log.info("params == {}",params);
return ResJsonUtil.toJsonSuccess();
}
注: 明確に示すために、Map は入力パラメーターとして使用されますが、Entity も入力パラメーターとして使用できます。主な理由は、入力パラメーターに 2 つのパラメーターを定義する必要があることと、Mybatis がストアド プロシージャを実行した後であることです。を選択すると、戻りパラメータ値が割り当てられます。パラメータの設定に進みます。
ストアド プロシージャの実行が完了すると、次の印刷例が表示されます。
2023-07-31 14:32:58.180 INFO 27640 --- [nio-7989-exec-1] c.e.whinterface.service.PayService : params == {
money=100, rechargeTime=2023-07-31, payPlatform=1, cardtype=1, message=充值成功, cardNo=362330200010138252, meg=1, serialNo=123123123}