實現代碼
@Override
public Object intercept(Invocation invocation) throws Throwable {
ResultSetHandler handler = (ResultSetHandler) invocation.getTarget();
// 反射獲取私有字段 mappedStatement
Field msField = ResultSetHandler.class.getDeclaredField("mappedStatement");
msField.setAccessible(true);
MappedStatement ms = (MappedStatement) msField.get(handler);
List resultMaps = ms.getResultMaps();
if (resultMaps != null && !resultMaps.isEmpty()) {
ResultMap rm = resultMaps.get(0);
Class> resultType = rm.getType(); // 這裡拿到 resultType Class
if (resultType != null && resultType == Map.class) {
// resultType 為 Map 時的特殊處理
}
}
return invocation.proceed();
}
注意
- 反射訪問私有字段依賴 MyBatis 內部結構,**版本升級可能失效**,建議封裝兼容層。
- `ResultMap.getType()` 返回 Java 類型 (`Class`),可用 `resultType.getName()` 或 `isAssignableFrom` 判斷。