mybatis調用sqlserver存儲過程


sqlserver中存儲過程函數為:

ALTER    PROCEDURE [dbo].[egl_point_ship]
    @order_id     varchar(32),
    @b_Success        int        OUTPUT, 
    @c_errmsg        varchar(250)    OUTPUT 
  ...
order_id是傳入的值,b_Success和c_errmsg是執行完存儲過程后返回輸出的值

DAO接口與mapper文件如下:

// mapper接口
void eglPointShip(Map map);
// mapper.xml文件
  <update id="eglPointShip" parameterType="map" statementType="CALLABLE">
    {
      call egl_point_ship(
                #{order_id,mode=IN,jdbcType=VARCHAR},
                #{b_Success,mode=OUT,jdbcType=INTEGER},
                #{c_errmsg,mode=OUT,jdbcType=VARCHAR}
                )
        }
  </update>

server層調用dao接口:

@Transactional
    public ProcedureDto pointSend(String moveOrderId) {
        Map<String, String> map = new HashMap<>();
        map.put(Procedure.orderId, moveOrderId);
        // 調用存儲過程
        this.moveOrdersMapper.eglPointShip(map);
        // map里得到返回信息
        String bSuccess = String.valueOf(map.get(Procedure.bSuccess));
        String cErrmsg = map.get(Procedure.cErrmsg);
        if ("0".equals(bSuccess)) {
            throw new ApplicationException(cErrmsg);
        }
    }

 2018/9/7修改:存儲過程不傳map,傳對象也是可以的,並且更加清晰

service層方法如下:

public void pointSend(String moveOrderId) {
        PointProcedure pointProcedure = new PointProcedure();
        pointProcedure.setOrderId(moveOrderId);
     // 調用存儲過程
this.moveOrdersMapper.eglPointShip(pointProcedure);
     // 回調信息
if (0 == pointProcedure.getSuccess()) { throw new ApplicationException(pointProcedure.getMsg()); } }

mapper文件里的parameterType需改為傳入的對象,也可以刪掉不寫,mybatis也能夠找到該參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM