// 调用object的方法
if (method.getDeclaringClass() == Object.class) {
return invokeObjectMethod(proxy, method, args);
}
// 获取当前DAO方法对应的Statement对象
Statement statement = getStatement(method);
//
// 将参数放入 Map
Map<String, Object> parameters;
StatementMetaData statemenetMetaData = statement.getMetaData();
if (args == null || args.length == 0) {
parameters = new HashMap<String, Object>(4);
} else {
parameters = new HashMap<String, Object>(args.length * 2 + 4);
for (int i = 0; i < args.length; i++) {
parameters.put(INDEX_NAMES[i], args[i]);
SQLParam sqlParam = statemenetMetaData.getSQLParamAt(i);
if (sqlParam != null) {
parameters.put(sqlParam.value(), args[i]);
}
}
}
// logging
StringBuilder invocationInfo = null;
if (debugEnabled) {
invocationInfo = getInvocationInfo(statemenetMetaData, parameters);
logger.debug("invoking " + invocationInfo.toString());
}
// executing
long begin = System.currentTimeMillis();
final Object result = statement.execute(parameters);
long cost = System.currentTimeMillis() - begin;
// logging
if (logger.isInfoEnabled()) {
if (invocationInfo == null) {