/**
* mybatisResultSet结果集拦截器
*/
@Component
@Intercepts(@Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class}))
public class ResultHandlerInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
ResultSetHandler resultSetHandler = (ResultSetHandler) invocation.getTarget();
Field mappedStatementField = ReflectionUtils.findField(DefaultResultSetHandler.class, "mappedStatement");
mappedStatementField.setAccessible(true);
MappedStatement mappedStatement = (MappedStatement) ReflectionUtils.getField(mappedStatementField, resultSetHandler);
//获取节点属性的集合
List<ResultMap> resultMaps = mappedStatement.getResultMaps();
int resultMapCount = resultMaps.size();
//获取当前resutType的类型
Class<?> resultType = resultMaps.get(0).getType();
if (resultMapCount > 0 && resultType.getName().equals("grp.pt3.model.ElementValue3")){
// Statement statement = (Statement) invocation.getArgs()[0];
// //获得结果集
// ResultSet resultSet = statement.getResultSet();
Object proceed = invocation.proceed();
Object handleResultSet = handleResultSet(proceed);
return handleResultSet;
}
return invocation.proceed();
}
private Object handleResultSet(Object resultSet){
if (resultSet instanceof ArrayList) {
ArrayList resultList = (ArrayList) resultSet;
for (int i = 0; i < resultList.size(); i++) {
if (resultList.get(i) instanceof Map) {
Map resultMap = (Map) resultList.get(i);
if(resultMap.get("id") != null ){
resultMap.put("ele_id",resultMap.get("id"));
}else if(resultMap.get("ele_id") != null){
resultMap.put("id",resultMap.get("ele_id"));
}
if(resultMap.get("code") != null ){
resultMap.put("ele_code",resultMap.get("code"));
}else if(resultMap.get("ele_code") != null){
resultMap.put("code",resultMap.get("ele_code"));
}
if(resultMap.get("name") != null ){
resultMap.put("ele_name",resultMap.get("name"));
}else if(resultMap.get("ele_name") != null){
resultMap.put("name",resultMap.get("ele_name"));
}
}
}
return resultList;
}
return resultSet;
}
@Override
public Object plugin(Object o) {
return Plugin.wrap(o,this);
}
@Override
public void setProperties(Properties properties) {
}
}
mybatis-ResultHandler解析:
自定义ResultHandler类处理结果集,适用范围小。
https://blog.csdn.net/qq_28695733/article/details/107212027