专栏名称: ImportNew
伯乐在线旗下账号,专注Java技术分享,包括Java基础技术、进阶技能、架构设计和Java技术领域动态等。
目录
相关文章推荐
芋道源码  ·  务必立即拿下软考证(政策红利) ·  20 小时前  
程序员晓梦  ·  卧槽!又是一个Java神器! ·  昨天  
程序员晓梦  ·  卧槽!又是一个Java神器! ·  昨天  
芋道源码  ·  务必立即拿下软考证(政策红利) ·  昨天  
ImportNew  ·  神操作!中国工程师拖 4 箱硬盘 80TB ... ·  3 天前  
51好读  ›  专栏  ›  ImportNew

MyBatis 插件 : 打印 SQL 及其执行时间

ImportNew  · 公众号  · Java  · 2017-06-23 11:47

正文

请到「今天看啥」查看全文


String sql = boundSql.getSql();

Object parameterObject = boundSql.getParameterObject();

List parameterMappingList = boundSql.getParameterMappings();

// 格式化Sql语句,去除换行符,替换参数

sql = formatSql(sql, parameterObject, parameterMappingList);

System.out.println("SQL:[" + sql + "]执行耗时[" + sqlCost + "ms]");

}

}

@Override

public Object plugin(Object target) {

return Plugin.wrap(target, this);

}

@Override

public void setProperties(Properties properties) {

}

@SuppressWarnings("unchecked")

private String formatSql(String sql, Object parameterObject, List parameterMappingList) {

// 输入sql字符串空判断

if (sql == null || sql.length() == 0) {

return "";

}

// 美化sql

sql = beautifySql(sql);

// 不传参数的场景,直接把Sql美化一下返回出去

if (parameterObject == null || parameterMappingList == null || parameterMappingList.size() == 0) {

return sql;

}

// 定义一个没有替换过占位符的sql,用于出异常时返回

String sqlWithoutReplacePlaceholder = sql;

try {

if (parameterMappingList != null) {

Class> parameterObjectClass = parameterObject.getClass();

// 如果参数是StrictMap且Value类型为Collection,获取key="list"的属性,这里主要是为了处理 循环时传入List这种参数的占位符替换

// 例如select * from xxx where id in ...

if (isStrictMap(parameterObjectClass)) {

StrictMap > strictMap = (StrictMap >)parameterObject;

if (isList(strictMap.get("list").getClass())) {

sql = handleListParameter(sql, strictMap.get("list"));

}

} else if (isMap(parameterObjectClass)) {

// 如果参数是Map则直接强转,通过map.get(key)方法获取真正的属性值

// 这里主要是为了处理

Map, ?> paramMap = (Map, ?>) parameterObject;

sql = handleMapParameter(sql, paramMap, parameterMappingList);

} else {

// 通用场景,比如传的是一个自定义的对象或者八种基本数据类型之一或者String

sql = handleCommonParameter(sql, parameterMappingList, parameterObjectClass, parameterObject);

}

}

} catch (Exception e) {

// 占位符替换过程中出现异常,则返回没有替换过占位符但是格式美化过的sql,这样至少保证sql语句比BoundSql中的sql更好看







请到「今天看啥」查看全文