myBatis3执行存储过程

使用myBatis3执行存储过程不像iBatis2那样,有procedure这样的标签可以供使用,如下为iBatis2的使用方法:

<procedure id="provCitySplit" parameterMap="provCitySplitParameterMap" resultClass="java.lang.Long">

  {call PKG_SUB_POLICY.PROV_CITY_SPLIT(?,?,?,?)}

</procedure>

parameterMap="provCitySplitParameterMap"的定义如下:

<parameterMap class="map" id="provCitySplitParameterMap">

  <parameter property="subPolicyId" jdbcType="DECIMAL" javaType="java.lang.Long" mode="IN"/>

  <parameter property="cityId" jdbcType="DECIMAL" javaType="java.lang.Long" mode="IN"/>

  <parameter property="fetchNum" jdbcType="DECIMAL" javaType="java.lang.Long" mode="IN"/>

  <parameter property="resultCode" jdbcType="DECIMAL" javaType="java.lang.Long" mode="OUT"/>

</parameterMap>


java调用方法如下:

@Override

public Long callProvCitySplitProcedure(Long subPolicyId, Long cityId,

    Long fetchNum) throws SQLException {

  Map<String, Long> map = new HashMap<String, Long>();

  map.put("subPolicyId", subPolicyId);

  map.put("cityId", cityId);

  map.put("fetchNum", fetchNum);

  SqlMapSession sqlMapSession = sqlMapClient.openSession();

  try {

    sqlMapSession.update("PROCEDURE.provCitySplit", map);

    Long resultCode = map.get("resultCode");

    return resultCode;          

  } catch (SQLException e) {

    throw new SQLException(e);

  } finally {

    if (sqlMapSession.getCurrentConnection() != null) {

      System.out.println("Get CurrentConnection and close...");

      sqlMapSession.getCurrentConnection().close();

    }

    sqlMapSession.close();

  }

}

 

而mybatis3已经没有procedure这样的标签,只剩下select来操作存储过程,使用方法如下:

<select id="cancelSubPolicy" statementType="CALLABLE">

    {call p_cancel_sub_policy(#{subPolicyId, jdbcType=NUMERIC, mode=IN},

                              #{canceledCount, jdbcType=NUMERIC, mode=OUT})}

</select>

java调用方法如下:

public long cancelSubPolicy(Integer coreDBId, Long subPolicyId) throws SQLException {

    SqlSession sqlSession = null;

    try {

        sqlSession = sessionFactory.openSession();

        final Map<String, Object> param = new HashMap<String, Object>();

        param.put("subPolicyId", subPolicyId);

        long time = System.currentTimeMillis();

        sqlSession.select("com.ailk.dm.odomain.dms.dao.MultiTaskDao.cancelSubPolicy", param, null);

        log.info("cancelSubPolicy elapsed time: " + (System.currentTimeMillis() - time) + "ms");

        BigDecimal canceledCount = (BigDecimal) param.get("canceledCount");

        // return canceled task count;

        return canceledCount.longValue();

    } catch (PersistenceException pe) {

        log.error("cancelSubPolicy failed: subPolicyId=" + subPolicyId, pe);

        throw new SQLException(pe);

    } finally {

        if (null != sqlSession) sqlSession.close();

    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值