После долгого изучения классов ibatis в нескольких пакетах у меня сработал следующий подход. (не удалось найти ни документации, касающейся этого подхода, ни содержания в единственной книге, доступной для ibatis - ibatis in action)
Шаг 1: Добавьте пользовательский ResultObjectFactory. Classdoc интерфейса ResultObjectFactory объясняет, что это такое и как оно ведет себя.
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-config
<resultObjectFactory type="TemporalDataResultObjectFactory" />
Шаг 3: Добавьте все ваши идентификаторы операторов ibatis, результатом которых являются временные данные, с ' td '.
пример:
<select id="_td_getTemporalEmployees" resultMap="temporalEmployee">
SELECT name, age, opCode, updateTime
FROM employee
WHERE updateTime BETWEEN #startTime# AND #endTime#
</select>
Шаг 4: Определите карту результата с фактическим классом (например: если вы хотите, чтобы результатом был TemporalData, затем установите класс 'Employee'), но со свойствами согласно классу 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, определенных выше, правильно задан javaType (в противном случае ibatis выдает исключения во время проверок, жалующихся на недоступные сеттеры)