å®ä¹ä¸ä¸ªMapInterceptorç¨äºæ¦æªå¯¹åºçç»æéè¿åä¸ä¸ªMapã
å
¶ä»£ç å¦ä¸æ示ï¼
@Intercepts(@Signature(method="handleResultSets", type=ResultSetHandler.class, args={Statement.class}))
public class MapInterceptor implements Interceptor {
/* (non-Javadoc)
* @see org.apache.ibatis.plugin.Interceptor#intercept(org.apache.ibatis.plugin.Invocation)
*/
public Object intercept(Invocation invocation) throws Throwable {
//éè¿invocationè·å代ççç®æ 对象
Object target = invocation.getTarget();
//ææ¶ResultSetHandleråªæFastResultSetHandlerè¿ä¸ç§å®ç°
if (target instanceof FastResultSetHandler) {
FastResultSetHandler resultSetHandler = (FastResultSetHandler) target;
//å©ç¨åå°è·åå°FastResultSetHandlerçParameterHandlerå±æ§ï¼ä»èè·åå°ParameterObjectï¼
ParameterHandler parameterHandler = ReflectUtil.getFieldValue(resultSetHandler, "parameterHandler");
Object parameterObj = parameterHandler.getParameterObject();
//å¤æParameterObjæ¯å¦æ¯æ们å®ä¹çMapParamï¼å¦ææ¯åè¿è¡èªå·±çå¤çé»è¾
if (parameterObj instanceof MapParam) {//æ¦æªå°äº
MapParam mapParam = (MapParam) parameterObj;
//è·åå°å½åçStatement
Statement stmt = (Statement) invocation.getArgs()[0];
//éè¿Statementè·åå°å½åçç»æéï¼å¯¹å
¶è¿è¡å¤çï¼å¹¶è¿å对åºçå¤çç»æ
return handleResultSet(stmt.getResultSet(), mapParam);
}
}
//å¦æ没æè¿è¡æ¦æªå¤çï¼åæ§è¡é»è®¤é»è¾
return invocation.proceed();
}
/**
* å¤çç»æé
* @param resultSet
* @param mapParam
* @return
*/
private Object handleResultSet(ResultSet resultSet, MapParam mapParam) {
// TODO Auto-generated method stub
if (resultSet != null) {
//æ¿å°Key对åºçå段
String keyField = (String) mapParam.get(MapParam.KEY_FIELD);
//æ¿å°Value对åºçå段
String valueField = (String) mapParam.get(MapParam.VALUE_FIELD);
//å®ä¹ç¨äºåæ¾Key-ValueçMap
Map<Object, Object> map = new HashMap<Object, Object>();
//handleResultSetsçç»æä¸å®æ¯ä¸ä¸ªListï¼å½æ们ç对åºçMapperæ¥å£å®ä¹çæ¯è¿åä¸ä¸ªåä¸çå
ç´ ï¼å¹¶ä¸handleResultSetsè¿åçå表
//çsize为1æ¶ï¼Mybatisä¼åè¿åç第ä¸ä¸ªå
ç´ ä½ä¸ºå¯¹åºMapperæ¥å£æ¹æ³çè¿åå¼ã
List<Object> resultList = new ArrayList<Object>();
try {
//ææ¯ä¸è¡å¯¹åºçKeyåValueåæ¾å°Mapä¸
while (resultSet.next()) {
Object key = resultSet.getObject(keyField);
Object value = resultSet.getObject(valueField);
map.put(key, value);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeResultSet(resultSet);
}
//æå°è£
好çMapåæ¾å°Listä¸å¹¶è¿è¡è¿å
resultList.add(map);
return resultList;
}
return null;
}
/**
* å
³éResultSet
* @param resultSet éè¦å
³éçResultSet
*/
private void closeResultSet(ResultSet resultSet) {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException e) {
}
}
/* (non-Javadoc)
* @see org.apache.ibatis.plugin.Interceptor#plugin(java.lang.Object)
*/
public Object plugin(Object obj) {
return Plugin.wrap(obj, this);
}
/* (non-Javadoc)
* @see org.apache.ibatis.plugin.Interceptor#setProperties(java.util.Properties)
*/
public void setProperties(Properties props) {
}
}
温馨提示:答案为网友推荐,仅供参考