2023-04-21 13:23:33 +08:00
|
|
|
|
package com.njcn.influx.base;
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-04-25 10:23:43 +08:00
|
|
|
|
import cn.hutool.core.util.ArrayUtil;
|
2023-04-21 13:23:33 +08:00
|
|
|
|
import com.njcn.influx.ano.Delete;
|
|
|
|
|
|
import com.njcn.influx.ano.Select;
|
|
|
|
|
|
import com.njcn.influx.ano.Insert;
|
|
|
|
|
|
import com.njcn.influx.core.InfluxExecutor;
|
|
|
|
|
|
import com.njcn.influx.core.ParameterHandler;
|
|
|
|
|
|
import com.njcn.influx.core.ResultSetHandler;
|
2023-04-25 10:23:43 +08:00
|
|
|
|
import com.njcn.influx.query.InfluxQueryWrapper;
|
2023-04-21 13:23:33 +08:00
|
|
|
|
|
|
|
|
|
|
import java.lang.annotation.Annotation;
|
|
|
|
|
|
import java.lang.reflect.InvocationHandler;
|
|
|
|
|
|
import java.lang.reflect.Method;
|
|
|
|
|
|
import java.lang.reflect.Parameter;
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
|
|
public class ProxyMapper implements InvocationHandler {
|
|
|
|
|
|
|
|
|
|
|
|
private ParameterHandler parameterHandler;
|
|
|
|
|
|
private InfluxExecutor executor;
|
|
|
|
|
|
private ResultSetHandler resultSetHandler;
|
|
|
|
|
|
|
|
|
|
|
|
public ProxyMapper(ParameterHandler parameterHandler, InfluxExecutor executor, ResultSetHandler resultSetHandler) {
|
|
|
|
|
|
this.parameterHandler = parameterHandler;
|
|
|
|
|
|
this.executor = executor;
|
|
|
|
|
|
this.resultSetHandler = resultSetHandler;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
2023-04-25 10:23:43 +08:00
|
|
|
|
public Object invoke(Object proxy, Method method, Object[] args) {
|
2023-04-21 13:23:33 +08:00
|
|
|
|
Annotation[] annotations = method.getAnnotations();
|
2023-04-25 10:23:43 +08:00
|
|
|
|
//没有注解的。查看参数是否为InfluxQueryWrapper
|
|
|
|
|
|
if (ArrayUtil.isEmpty(annotations)) {
|
|
|
|
|
|
Parameter[] parameters = method.getParameters();
|
|
|
|
|
|
if (args.length == 1 && args[0] instanceof InfluxQueryWrapper) {
|
|
|
|
|
|
InfluxQueryWrapper influxQueryWrapper = (InfluxQueryWrapper) args[0];
|
|
|
|
|
|
Class resultType = influxQueryWrapper.getResultEntity();
|
|
|
|
|
|
List<Object> resultList = executor.select(influxQueryWrapper.generateSql(), resultType);
|
|
|
|
|
|
//根据返回类型返回结果
|
|
|
|
|
|
Class<?> returnType = method.getReturnType();
|
|
|
|
|
|
return resultSetHandler.handleResultSet(resultList, returnType);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//采用注解的形式,即将sql写在注解里
|
2023-04-21 13:23:33 +08:00
|
|
|
|
if (annotations.length == 1) {
|
|
|
|
|
|
Annotation annotation = annotations[0];
|
|
|
|
|
|
Class<? extends Annotation> annotationType = annotation.annotationType();
|
|
|
|
|
|
//是查询的
|
|
|
|
|
|
if (annotationType == Select.class) {
|
|
|
|
|
|
Select selectAnnotation = method.getAnnotation(Select.class);
|
|
|
|
|
|
//拼接sql
|
|
|
|
|
|
String sql = selectAnnotation.value();
|
|
|
|
|
|
Parameter[] parameters = method.getParameters();
|
|
|
|
|
|
sql = parameterHandler.handleParameter(parameters, args, sql);
|
|
|
|
|
|
//查询结果
|
|
|
|
|
|
Class resultType = selectAnnotation.resultType();
|
|
|
|
|
|
List<Object> list = executor.select(sql, resultType);
|
|
|
|
|
|
//根据返回类型返回结果
|
|
|
|
|
|
Class<?> returnType = method.getReturnType();
|
|
|
|
|
|
return resultSetHandler.handleResultSet(list, returnType);
|
|
|
|
|
|
}
|
|
|
|
|
|
//是插入的
|
|
|
|
|
|
if (annotationType == Insert.class) {
|
|
|
|
|
|
executor.insert(args);
|
|
|
|
|
|
}
|
|
|
|
|
|
//是删除的
|
|
|
|
|
|
if (annotationType == Delete.class) {
|
|
|
|
|
|
Delete deleteAnnotation = method.getAnnotation(Delete.class);
|
|
|
|
|
|
//拼接sql
|
|
|
|
|
|
String sql = deleteAnnotation.value();
|
|
|
|
|
|
Parameter[] parameters = method.getParameters();
|
|
|
|
|
|
sql = parameterHandler.handleParameter(parameters, args, sql);
|
|
|
|
|
|
//执行sql
|
2023-04-25 10:23:43 +08:00
|
|
|
|
executor.delete(sql);
|
2023-04-21 13:23:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|