
com.zlyx.easymybatis.mybatis.interceptors.ResultSetInterceptor Maven / Gradle / Ivy
package com.zlyx.easymybatis.mybatis.interceptors;
import org.apache.ibatis.executor.resultset.ResultSetHandler;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ResultMap;
import org.apache.ibatis.plugin.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSONObject;
import com.zlyx.easydatabase.abstracts.AbstractResultSetInterceptor;
import com.zlyx.easydatabase.local.ReturnType;
import com.zlyx.easydatabase.utils.FieldUtils;
import com.zlyx.easymybatis.abstraccts.AbstractMapper;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.List;
import java.util.Properties;
/**
*
* @Auth 赵光
* @Describle
* @2019年1月14日 下午12:28:08
*/
@Intercepts({ @Signature(type = ResultSetHandler.class, method = "handleResultSets", args = { Statement.class }) })
public class ResultSetInterceptor extends AbstractResultSetInterceptor implements Interceptor {
private final Logger logger = LoggerFactory.getLogger(AbstractMapper.class);
@Override
public Object intercept(Invocation invocation) throws Throwable {
ResultSetHandler resultSetHandler = (ResultSetHandler) invocation.getTarget();
Field resultField = resultSetHandler.getClass().getDeclaredField("mappedStatement");
resultField.setAccessible(true);
MappedStatement mappedStatement = (MappedStatement) resultField.get(resultSetHandler);
List resultMaps = mappedStatement.getResultMaps();
int count = resultMaps.size();
Class> resultType = resultMaps.get(0).getType();
boolean flag = false;
if(ReturnType.getType()!=null){
resultType = ReturnType.getType();
flag = true;
}
if(resultType == List.class){
resultType = JSONObject.class;
}
if (count > 0 && !resultType.getName().startsWith("java")) {
Statement statement = (Statement) invocation.getArgs()[0];
ResultSet resultSet = null;
try{
resultSet = statement.getResultSet();
if (resultSet != null) {
if(flag){
return getResults(resultType, resultSet);
}
}
}catch(Exception e){
e.printStackTrace();
}
}
return invocation.proceed();
}
@Override
public String getFieldName(Field field) throws Exception {
return FieldUtils.getFieldName("mybatisParser",field);
}
@Override
public Object plugin(Object target) {
if (target instanceof ResultSetHandler) {
return Plugin.wrap(target, this);
} else {
return target;
}
}
@Override
public void setProperties(Properties properties) {
String dialect = properties.getProperty("dialect");
logger.info("mybatis intercept dialect:{}", dialect);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy