2017-03-27 40 views
0

我從iBatis的2升級到MyBatis的3ibatis的2至3的MyBatis轉換 - 道文件返回光標信息

該項目的過程中包含了許多道文件。我注意到一些直接返回數據,其他人將數據加載到out參數中。

例如,

theData = (List<SomeDataType>) getSqlMapClientTemplace().queryForList("getData", params); 

getSqlMapClientTemplate().queryForList("getOtherData", params); 
theData = (List<SomeOtherDataType>) params.get("out_cursor"); 

我覺得不同的是,沒有在映射了一個返回的數據沒有結果映射:

<parameter property="someData" 
      javaType="java.sql.ResultSet" 
      jdbcType="ORACLECURSOR" 
      mode="OUT" /> 

但有一個返回參數:

<parameter property="otherData" 
      javaType="java.sql.ResultSet" 
      jdbcType="ORACLECURSOR" 
      mode="OUT" 
      resultMap="getSomeOtherDataResult" /> 

問題是,MyBatis3允許第一個調用類型,還是一切都需要從第二個調用的參數中檢索?

在我的轉換後的DAO類,我用我的映射器類,如下所示:

MyMapper mapperForSession = getSqlSession().getMapper(MyMapperClass.class); 
mapperForSession.getOtherData(params); 
return (List<SomeOtherDataType>) params.get("out_cursor"); 

回答

1

你不提,但我瞭解底層的SQL實際存儲過程或存儲功能。

1日聲明將一個函數工作「選擇」:

SELECT * FROM theFunction(#{param1}, #{param2}) 

而且總有一個結果地圖,它只是不強制提供一個自定義的,因爲MyBatis會映射結果被默認設置爲一鍵值映射。這意味着映射到自定義類型將需要指定一個可能極簡的自定義結果圖:只要目標類型在列名稱匹配屬性時,如果需要,可以設置mapUnderscoreToCamelCase

用於程序的風格

第二方式調用:

{ #{outList, jdbcType=CURSOR, mode=OUT, javaType=java.sql.ResultSet, resultMap=someResultMapId} = call theFunction(#{param1}, #{param2}) } 

和實際步驟:

{ call theProcedure(#{inParam1}, #{inParam2}, #{outList, jdbcType=CURSOR, mode=OUT, javaType=java.sql.ResultSet, resultMap=someResultMapId}) }