package com.cnblogs.kmpp.interceptor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.ibatis.cache.CacheKey;
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.plugin.Plugin;
import org.apache.ibatis.scripting.xmltags.DynamicContext;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.apache.log4j.Logger;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.util.Collection;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.Executor;
/**
* Mybatis-拦截器(Plugin+Interceptor)
* #@Intercepts 实现Interceptor接口的类声明,使该类注册成为拦截器
*/
@Intercepts(value = {
@Signature(type = Executor.class, //要拦截的对象
method = "update",//要拦截的方法
args = {MappedStatement.class, Object.class, Connection.class, Integer.class}),//拦截方法的参数
@Signature(type = Executor.class,
method = "query",
args = {MappedStatement.class, Object.class, Connection.class, Integer.class, RowBounds.class, ResultHandler.class,
CacheKey.class, BoundSql.class}),
@Signature(type = Executor.class,
method = "query",
args = {MappedStatement.class, Object.class, Connection.class, Integer.class, RowBounds.class, ResultHandler.class})})
/*@Component("sqlInterceptor")*/
public class SqlInterceptor implements Interceptor {
private static final Logger logger = Logger.getLogger(SqlInterceptor.class);
public Object intercept(Invocation invocation) {
try {
Object target = invocation.getTarget();
Object result = null;
ObjectMapper mapper = new ObjectMapper();
if (target instanceof Executor) {
long start = System.currentTimeMillis();
Method method = invocation.getMethod();
/*执行方法*/
result = invocation.proceed();
long end = System.currentTimeMillis();
final Object[] args = invocation.getArgs();
//获取原始的SQL语句
MappedStatement ms = (MappedStatement) args[0];
String commandName = ms.getSqlCommandType().name();
String name = method.getName();
if (commandName.startsWith("INSERT")) {
name += "=新增";
} else if (commandName.startsWith("UPDATE")) {
name += "=修改";
} else if (commandName.startsWith("DELETE")) {
name += "=删除";
} else if (commandName.startsWith("SELECT")) {
name += "=查询";
}
String message = "[SqlInterceptor] execute [" + name + "] cost [" + (end - start) + "] ms";
StringBuilder stringBuffer = new StringBuilder();
stringBuffer.append(message);
stringBuffer.append("\n");
//获取原始的SQL参数
Object parameterObject = args[1];
BoundSql boundSql = ms.getBoundSql(parameterObject);
String sql = boundSql.getSql();
List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
String parameterObjects = mapper.writeValueAsString(boundSql.getParameterObject());
String id = ms.getId();
stringBuffer.append("id=").append(id);
stringBuffer.append("\r\n");
stringBuffer.append("sql=").append(sql);
stringBuffer.append("\n");
stringBuffer.append("parameterMappings=").append(parameterMappings);
stringBuffer.append("\n");
stringBuffer.append("parameterObjects=").append(parameterObjects);
stringBuffer.append("\n");
// stringBuffer.append("result="+result);
if (result != null) {
if (result instanceof List) {
stringBuffer.append("result=").append(((List) result).size());
} else if (result instanceof Collection) {
stringBuffer.append("result=").append(((Collection) result).size());
} else {
stringBuffer.append("result=" + 1);
}
} else {
stringBuffer.append("result=NULL");
}
stringBuffer.append("\n");
logger.warn(stringBuffer.toString());
//数组可能为空
ParameterMapping mapping = boundSql.getParameterMappings().get(0);
Configuration configuration = ms.getConfiguration();
DynamicContext context = new DynamicContext(configuration, parameterObject);
String originSql = context.getSql();
System.out.println("@@@@originSql:" + originSql);
}
return result;
} catch (Exception ex) {
System.out.println("%%%%Exception:" + ex.getMessage());
}
return null;
}
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
public void setProperties(Properties properties) {
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
源码主要用于学习整合SSM框架:SpringMVC + Spring + MyBatis 构建maven多模块工程项目.zip
共69个文件
java:42个
xml:22个
properties:3个
需积分: 1 0 下载量 75 浏览量
2023-12-07
23:28:58
上传
评论
收藏 49KB ZIP 举报
温馨提示
数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考 数据结构学习资料 数据结构项目实践 数据结构源代码 供参考
资源推荐
资源详情
资源评论
收起资源包目录
源码主要用于学习整合SSM框架:SpringMVC + Spring + MyBatis 构建maven多模块工程项目,根据不同功能划分模块,方便管理和解耦。项目主要涉及到的内容有:基于SpringMVC框架(非SpringBoot启动方式),结合MyBatis构建数据库访….zip (69个子文件)
code_21207
web-common
pom.xml 728B
src
test
java
com
cnblogs
kmpp
common
TestPlay.java 581B
main
resources
blank-disc.xml 1KB
java
com
cnblogs
kmpp
common
Impl
BlankDisc.java 1KB
CompactDisc.java 84B
filter
AuthenticationFilter.java 3KB
config
CDPlayerConfig.java 725B
web-service
pom.xml 2KB
src
main
java
com
cnblogs
kmpp
service
MemberService.java 195B
AlbumService.java 418B
UserService.java 389B
Impl
AlbumServiceImpl.java 4KB
UserServiceImpl.java 4KB
PerformanceImpl.java 638B
MemberServiceImpl.java 628B
Performance.java 118B
web-aspect
pom.xml 1KB
src
main
java
com
cnblogs
kmpp
aspect
PerformanceCounter.java 1004B
Audience.java 5KB
pom.xml 7KB
web-app
pom.xml 2KB
src
main
resources
spring-mvc.xml 1KB
spring.xml 2KB
log4j.properties 2KB
java
com
cnblogs
kmpp
swagger2
SwaggerConfig.java 2KB
api
AlbumAPI.java 1KB
PerformanceAPI.java 1KB
MemberAPI.java 1KB
UserAPI.java 2KB
webapp
WEB-INF
web.xml 4KB
index.jsp 981B
web-database
pom.xml 3KB
src
main
resources
mybatis-config.xml 462B
database.sql 914B
spring-mybatis.xml 5KB
config.properties 212B
java
com
cnblogs
kmpp
database
dao
UserInfoMapper.java 447B
CourseInfoMapper.java 404B
AlbumDao.java 1KB
Impl
BaseDaoImpl.java 3KB
AlbumDaoImpl.java 1KB
CourseUserInfoMapper.java 432B
BaseDao.java 4KB
mapping
UserInfoMapper.xml 4KB
AlbumMapper.xml 4KB
CourseInfoMapper.xml 3KB
CourseUserInfoMapper.xml 3KB
model
UserInfo.java 734B
CourseUserInfo.java 521B
AlbumInfo.java 2KB
CourseInfo.java 623B
web-domain
pom.xml 959B
src
main
java
com
cnblogs
kmpp
domain
Member.java 609B
Album.java 2KB
Course.java 612B
User.java 821B
BaseModel.java 124B
web-job
pom.xml 1KB
src
test
java
com
cnblogs
kmpp
job
JobTest.java 97B
main
resources
quartz-config.xml 3KB
java
com
cnblogs
kmpp
job
QuartzJob.java 658B
web-interceptor
pom.xml 1KB
src
main
java
com
cnblogs
kmpp
interceptor
SqlInterceptor.java 5KB
web-cache
pom.xml 1KB
src
main
resources
redis-content.xml 1011B
redis.properties 146B
java
com
cnblogs
kmpp
redis
MemberDao.java 255B
Impl
MemberDaoImpl.java 4KB
RedisGeneratorDao.java 791B
共 69 条
- 1
资源评论
土豆片片
- 粉丝: 1528
- 资源: 5641
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功