首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MyBatis Interceptor 獲取 resultType:反射提取 MappedStatement 結果映射

     編輯:程式設計綜合問答

實現代碼

@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` 判斷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved