You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udi-spms-java/src/main/java/com/glxp/api/handler/MybatisDmHandler.java

50 lines
1.8 KiB
Java

package com.glxp.api.handler;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;
import org.apache.ibatis.executor.statement.StatementHandler;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
@Intercepts({
@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})
})
public class MybatisDmHandler implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 获取被拦截的 StatementHandler 对象
StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
// 获取 SQL 语句
String sql = (String) metaObject.getValue("delegate.boundSql.sql");
System.out.println("拦截到的 SQL: " + sql);
String processedSql = camelToSnake(sql);
// // 可在此对 SQL 进行处理,例如修改 SQL、添加日志等
// String processedSql = sql.toUpperCase();
System.out.println("处理后的 SQL: " + processedSql);
metaObject.setValue("delegate.boundSql.sql", processedSql);
// 继续执行原方法
return invocation.proceed();
}
@Override
public Object plugin(Object target) {
// 将目标对象包装成代理对象
return Plugin.wrap(target, this);
}
@Override
public void setProperties(Properties properties) {
// 可在此设置拦截器的属性
}
public String camelToSnake(String camelCase) {
// 使用正则表达式替换大写字母为下划线加小写字母
return camelCase.replaceAll("(?<=[a-z])([A-Z])", "_$1").toLowerCase();
}
}