經過大量通過ibatis的班在多個包挖,下面的方法爲我工作。 (找不到有關這種方法的任何文檔,也沒有任何有關ibatis-ibatis可用的書中的任何內容)
步驟1:添加一個自定義的ResultObjectFactory。 ResultObjectFactory接口Classdoc解釋它是什麼,它的行爲。
public class TemporalDataResultObjectFactory implements ResultObjectFactory {
/*
* (non-Javadoc)
*
* @see
* com.ibatis.sqlmap.engine.mapping.result.ResultObjectFactory#createInstance
* (java.lang.String, java.lang.Class)
*/
@Override
public Object createInstance(String statementId,
@SuppressWarnings("rawtypes") Class clazz)
throws InstantiationException, IllegalAccessException {
if (!statementId.startsWith("_td_")) {
return null;
}
TemporalData<Object> temporalResult = new TemporalData<Object>();
Object dataObject = clazz.newInstance();
temporalResult.setData(dataObject);
return temporalResult;
}
/*
* (non-Javadoc)
*
* @see
* com.ibatis.sqlmap.engine.mapping.result.ResultObjectFactory#setProperty
* (java.lang.String, java.lang.String)
*/
@Override
public void setProperty(String arg0, String arg1) {
// TODO Auto-generated method stub
}
}
步驟2:上述ResultObjectFactory添加到SQL-MAP-配置
<resultObjectFactory type="TemporalDataResultObjectFactory" />
第3步:前綴所有ibatis的聲明IDS,其結果是 'TD' 時間數據。
例如:
<select id="_td_getTemporalEmployees" resultMap="temporalEmployee">
SELECT name, age, opCode, updateTime
FROM employee
WHERE updateTime BETWEEN #startTime# AND #endTime#
</select>
步驟4:定義結果地圖與實際的類(例如:如果要得到的結果是TemporalData,那麼類設置爲「僱員」),但與屬性每temporalData類。
例如:
<resultMap class="Employee" id="temporalEmployee">
<result property="data.name" column="name" javaType="String"/>
<result property="data.age" column="age" javaType="long"/>
<result property="data.bidPrice" column="bid_price" javaType="int"/>
<result property="data.dob" column="dob" javaType="java.util.Date"/>
<result property="opCode" column="opCode" javaType="String"/>
<result property="updateTime" column="updateTime" javaType="java.util.Date"/>
</resultMap>
第5步:確保使用上面定義的resultMap的所有屬性已java類型適當設置(否則,ibatis的拋出驗證抱怨無法制定者中的例外)