Commit 3d11dd4a authored by qin.wen's avatar qin.wen

--no commit message

parent 3b7c3b90
package com.cesgroup.mybatis2.interceptor;
package com.cesgroup.mybatis2.interceptor;
import com.alibaba.fastjson.JSONObject;
import com.cesgroup.mybatis2.handle.MyTypeHandle;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.session.ResultHandler;
import java.sql.Statement;
import java.util.List;
import java.util.Map;
import java.util.Properties;
/**
*
* @author kks
* @date 2020/01/02
*/
@Intercepts({
@Signature(type = StatementHandler.class, method = "query", args = {Statement.class, ResultHandler.class}),
@Signature(type = StatementHandler.class, method = "update", args = {Statement.class}),
@Signature(type = StatementHandler.class, method = "batch", args = { Statement.class })
})
public class MyMybatisLogInterceptor implements Interceptor {
final Log log = LogFactory.getLog(MyTypeHandle.class);
@Override
public Object intercept(Invocation invocation) throws Throwable {
Object target = invocation.getTarget();
StatementHandler statementHandler = (StatementHandler)target;
try {
return invocation.proceed();
} finally {
BoundSql boundSql = statementHandler.getBoundSql();
String sql = boundSql.getSql();
Object parameterObject = boundSql.getParameterObject();
List<ParameterMapping> parameterMappingList = boundSql.getParameterMappings();
// 格式化Sql语句,去除换行符,替换参数
sql = formatSql(sql, parameterObject, parameterMappingList);
log.warn("SQL:" + sql + ";");
}
}
private String formatSql(String sql, Object parameterObject, List<ParameterMapping> parameterMappingList) {
sql = sql.replaceAll("\r|\n|\t", " ").replaceAll("\\s+", " ");
if(parameterObject == null){
sql = sql.replaceAll("\\?", " null");
return sql;
}
if(Map.class.isAssignableFrom(parameterObject.getClass())){
Map pb = (Map)parameterObject;
for(ParameterMapping temp: parameterMappingList){
if (pb.get(temp.getProperty()) != null){
if (pb.get(temp.getProperty()).getClass().isAssignableFrom(JSONObject.class)){
JSONObject infObject = (JSONObject) pb.get(temp.getProperty());
sql = sql.replaceFirst("\\?","'" + infObject.toJSONString() + "'");
}else {
sql = sql.replaceFirst("\\?","'" + pb.get(temp.getProperty()) + "'");
}
}else {
sql = sql.replaceFirst("\\?","'null'");
}
}
}
if(String.class.isAssignableFrom(parameterObject.getClass())) {
sql = sql.replaceFirst("\\?", parameterObject == null ? "null" : "'" + parameterObject + "'");
}
if(Number.class.isAssignableFrom(parameterObject.getClass())) {
sql = sql.replaceFirst("\\?", parameterObject == null ? "null" : parameterObject.toString());
}
return sql;
}
@Override
public Object plugin(Object o) {
return Plugin.wrap(o, this);
}
@Override
public void setProperties(Properties properties) {
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment