package com.shuyu.utils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.type.TypeHandlerRegistry;
import java.text.DateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.regex.Matcher;
/**
* @Title: MybatisInterceptor.java
* @Package com.hc.utils
* @Description: ���ش�ӡ����sql���
* @author Shuyu.Wang
* @date Creation time: 2017��9��4��
* @version V1.0
*/
@Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }),
@Signature(type = Executor.class, method = "query", args = { MappedStatement.class, Object.class,
RowBounds.class, ResultHandler.class }) })
public class MybatisInterceptor implements Interceptor {
@SuppressWarnings("unused")
private Properties properties;
@Override
public Object intercept(Invocation invocation) throws Throwable {
try {
MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
Object parameter = null;
if (invocation.getArgs().length > 1) {
parameter = invocation.getArgs()[1];
}
String sqlId = mappedStatement.getId();
BoundSql boundSql = mappedStatement.getBoundSql(parameter);
Configuration configuration = mappedStatement.getConfiguration();
String sql = getSql(configuration, boundSql, sqlId, 0);
// Log.d(sql);
System.out.println(sql);
} catch (Exception e) {
System.out.println(e);
// Log.e(e);
}
// }
return invocation.proceed();
}
public static String getSql(Configuration configuration, BoundSql boundSql, String sqlId, long time) {
String sql = showSql(configuration, boundSql);
StringBuilder str = new StringBuilder(100);
str.append(sqlId);
str.append(":");
str.append(sql);
return str.toString();
}
private static String getParameterValue(Object obj) {
String value = null;
if (obj instanceof String) {
value = "'" + obj.toString() + "'";
} else if (obj instanceof Date) {
DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.CHINA);
value = "'" + formatter.format(new Date()) + "'";
} else {
if (obj != null) {
value = obj.toString();
} else {
value = "";
}
}
return value;
}
public static String showSql(Configuration configuration, BoundSql boundSql) {
Object parameterObject = boundSql.getParameterObject();
List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
String sql = boundSql.getSql().replaceAll("[\\s]+", " ");
if (CollectionUtils.isNotEmpty(parameterMappings) && parameterObject != null) {
TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(getParameterValue(parameterObject)));
} else {
MetaObject metaObject = configuration.newMetaObject(parameterObject);
for (ParameterMapping parameterMapping : parameterMappings) {
String propertyName = parameterMapping.getProperty();
if (metaObject.hasGetter(propertyName)) {
Object obj = metaObject.getValue(propertyName);
sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(getParameterValue(obj)));
} else if (boundSql.hasAdditionalParameter(propertyName)) {
Object obj = boundSql.getAdditionalParameter(propertyName);
sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(getParameterValue(obj)));
} else {
sql = sql.replaceFirst("\\?", "ȱʧ");
} // ��ӡ��ȱʧ�����Ѹò���ȱʧ����ֹ��λ
}
}
}
return sql;
}
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
@Override
public void setProperties(Properties properties0) {
this.properties = properties0;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
SSM框架模板 (270个子文件)
00c68d3656161a979ad0dbba9177dfa6d57de2 5KB
025bc9b4a590a5030bfced458e2816590c9a33 21KB
02cb587731cb4db5d7b0e55f5e4fb0835b1a0c 104KB
059f453f9ec470c033035f53b600127da58471 393B
07b72e67efb3318bc3f0ca721f926dad79f823 57B
08750373d5c31a261c30644fb71e8746d363bb 45B
0a5f697240e6f1d882b2d539ed95d85e59ea9e 196B
0fcab044418eb97bf17bb2ed83fa28426802dd 8KB
14a410c84a2f86978b3d02a22f3e951aa9c086 13KB
16f731f44e1d316b8d2e7a7fb7dae9877763f8 889B
17a0c5b9dfcdde4c4dee7569fa191b40f208bb 26KB
1b2bff86eb95b29d839a55f73a8f5ba823bd67 484B
1e43590a011cba9db1e2704693f8374e399dad 10KB
1f0826c770eb2292b1b290cf0a1912ee8c935b 60B
21a31db547cc586bddeade49f2e837062ec54b 1KB
25da8d552646350aef475833de20822155da8d 19KB
264ec32ea30e647cfa4add07b6d192030bb166 581B
2698e85aee584b0f47c0cccff8a8b9b16a5c66 21KB
26ad253ddbaa2f02b3ad95e93ebc1a20950179 1KB
2744e957f77750ef69b4e90a4fb31b30f795c0 1KB
29c2a90bc2f381b6349871815d4ce2a4362948 1KB
2a224ddd604f92692819f20ed275391285f103 186B
2cc842cb0449e8300b3e862b4fe8d86fd2a068 605B
2e737dd4b6d8b9af8981a6024193ec4fe938cf 45B
32108469ff6155354895f16e55c03720d0a6ff 196B
327cb6dbaa89f8c8630ad1180d55e6f7f4b09c 117B
32cff3651b5f592ea41f40086b5c5d39ffaf14 231B
3500f67b21dd3ee962661f9bbed337ada80465 578B
353e4cfb8fb57c41d3e96522b5e8246d3ef9c1 717B
37322ee84a465ef7f90fa3b2197b6ac41a7072 169B
3819138e9fe8c3cccc1631be26336b2bc400d9 111B
38df1b460e49b8b65e4d7e4139b55fbb983feb 700B
393889242fb3ea9e0205fa84369ec7bb66d15a 7KB
3aa8b6a4a8426d94e3d8782b20801655918db7 5KB
3dc3fda1ba6551392a0f09f5d7dd2d498945d5 1KB
3df458f45fbf42e9b6871fd0ced3172a41c967 120B
3e8231f18a66efac3dd22d207c21c3c6b733bd 630B
3f48e311a8c6c3c41b9217f8c18eeaa50a38a6 361B
41dd0d4f0445a00a86392faf4cc89fc518a5b7 120B
41e91799dc7f12c653d98ac72a1c2eb08c5095 1KB
425367e63a57ccfc7352acb91422fb550eb817 46B
426a9c34b13bd4a65d18bab206a562b9477b4f 1KB
43e8ce5a46781defd33d5304a0cb4191e72546 79B
46abbedef3d704732bbeb80fee672a0798469f 292B
484ca27ac550ae1560be08c8190e25850583c2 52B
4bbbbf258aad7b1fe25e4773671e36ff72bfcc 25KB
4d63c859d9982013a0ba51231c5fabc2c2c3fc 250B
524983ad8d296be95cb5b469efd1987d6e04e3 22KB
53179efabc7a6aee199fe00a65b0037000ad47 682B
58206484501db1fa95580a89cd2f611fe821c6 331B
5ec865697f717f13cb9e40203810eb23cfee16 91B
60bcf06a7685b9ea53983c125e7058906fbcbd 2KB
66a718877bdd27cf0249ebe6717aacd0d11d8c 1KB
6836f08afdce3edc90bb6f917fe2fef997b88b 1KB
69749ab04526d732149e8301b1f30ef711530e 814B
6a5d4eb8e974f2c0da60d3fd411e20262094d2 1KB
6c4d135bf954ef3c2b15bc6493f72a01909aee 27KB
6d72c7e3a2e836467229a2d9467389738b61aa 32KB
726a7cfce4130243a3de4bb2bd412000658896 11KB
7572f87ab79c07ff9af09173177ca0fdadb616 177B
766b66b6a2e9c732626c5c40fc5649ba262c73 884B
77c8ce421873785e31606ec9d96a310b13f6a8 48B
78a11a86cc4b0040359085392e5f365cb34292 120B
7bf13718dc56928f313ef6eeb1c2b1a47db69a 84B
7e5d6b1c9407d191f6d258ef8d224f7718c116 1KB
7f72a12ddf6e3a3d058ee1d357f42e5949b33a 161B
87f4de4c12c247960111b997acbfd2d452449d 196B
896c441fd59e5c2e9bdab90816661de06cdcba 26KB
8cea662b2434571debae37fa6ba09fc5f24776 25KB
8dff14bac6ce8cdb530badf1108115e4eb297b 1KB
90dad691fac58d17b0fb77aa31c466fc27c823 1KB
922a96136bd377eb966bb1e232764ac5ed76bc 47B
9388ac23fa8b0047ffb877afff3224422f8a8f 87B
93f74c3bede4b96290650f7a21c98eb1e01351 11KB
9483f9ed2a50d9ebe9bea6d42144a17bf4200f 5KB
95a75ea16f94e106ab065defba3bae4c80285b 3KB
968361dffc9045d74db8a8f289771828f130d6 64B
96a65579ae903d4008f9d268fac422ef9d3679 790B
9c20d9c86e4dfa7dc8fd58b90672aeac5328e3 1KB
9d2fffb64a2e6e282b90e489d83fc4ddfac3cd 6KB
9f394c9c17f5b55f7de8c462fc1ceeb6686a82 82B
a4f1455ac45e9cdc3659d77d6a47370048eb1c 1000B
a678d5504aa3a1c204342fb832637ab2eeec51 7KB
a73964c6a1067399a4400b37b3aea3e9f82083 46B
a9a300b20e0fd8c48730863fbadf8af950d440 379B
af1c16445029df27db2e31dd131b68ba1b7651 645B
af34782df118a82c70199ad1ab3257de854b84 958B
b078943c4512f4598bd0b3c021f7866373fe93 578B
b1a5bfb9eadbaefcca94b53b3ab435712fbccb 665B
be5b80aa61c18aa39d39f41e2efe66fa4044ec 54B
beb374ac17d20e750daf0a6498f3a2f68c9020 1KB
beda9dd4df4ee38c143a03157c9f355e1f374f 179B
bf24834ac7ef0ccf0a690fdc4966c67389a079 2KB
c2d590ff60fc56ff1bcb02a1b72c43de0e6612 994B
c3751ac2ebb36eeb3e7cd3e8d6a839ab3e7ca3 353B
c5b5fe150b76d5cce43d0f1f6dab12505e929a 120B
c7626d7f97066362bcd4091efe624525313260 1KB
c815aa92cf7a8a2cdcf6ac3380aec4e29e5dc8 1KB
c98b89d5c233132ce035f7d0d9431ae685cd8c 713B
cb10159eabacd70b478dc40550d0e546281a29 587B
共 270 条
- 1
- 2
- 3
资源评论
wang_shuyu
- 粉丝: 190
- 资源: 86
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于同态加密的联邦学习安全聚合系统源码+项目说明(高分项目).zip
- 基于卷积神经网络算法识别猫狗图片项目源码+文档说明(高分大作业).zip
- 处理数据的界面,使用pyqt+pandas开发da-console-tool-master.zip
- pandas 使用笔记study-pandas-master.zip
- 基于matlab的薛定谔方程数值计算应用源码(下载即用).zip
- docker ps: 列出运行中的容器 提供一个完整的微服务架构轻量级支撑运行时系统.zip
- 基于CS5080+TP4056 芯片5V输入4.2V 8.4V输出锂电充电控制板硬件(原理图+PCB)文件.zip
- 常用docker的参考命令.zip
- 基于matlab实现的模糊聚类分析项目源码.zip
- docker build: 从 Dockerfile 构建一个镜像
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功