1. 程式人生 > >mybatis呼叫儲存過程,獲取返回的遊標

mybatis呼叫儲存過程,獲取返回的遊標

將呼叫儲存過程引數放入map中,由於返回的遊標中包含很多引數,所以再寫一個resultmap與之對應,型別為hashmap。設定返回的jdbcType=CURSOR,resultMap設定為id對應的值。最後遊標中的值就輸出到list中了。程式碼如下:

service層

 public HashMap TestProcedure(String id) {
        HashMap map = new HashMap();    
        map.put("id", id);  
        map.put("cursor", null);
        this.testProcedureDao.testProcedure(map);
        System.out.println(map.get("cursor"));
        return map;
    }

dao層

@Mapper
public interface TestProcedureDao{


    void testProcedureDao(@Param("map") HashMap map);
}

mapper

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.cms.demo.dao.test1db.TestProcedureDao">

    <resultMap type="java.util.HashMap" id="cursorMap">
     
    </resultMap>
     <!--呼叫儲存過程 -->

    <select id="testProcedureDao" parameterType="map"  statementType="CALLABLE"  >
         call runcrm.p_act_stk_info(
               #{map.id,mode=IN,jdbcType=INTEGER},         
               #{map.cursor,mode=OUT,jdbcType=CURSOR,resultMap=cursorMap
                })
  </select>
</mapper>

 儲存過程返回的resultMap 可以用具體的物件接收,需要宣告每一個欄位以及資料型別;也可以用HashMap來接收,不需要宣告所有的欄位(部分格式如BigDecimal、clob等,需要宣告來轉換格式,否則會報錯)