
sf.database.mapper.handle.MethodHandleTemplate Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sorm Show documentation
Show all versions of sorm Show documentation
java jpa tool for spring
The newest version!
package sf.database.mapper.handle;
import sf.common.wrapper.Page;
import sf.database.dao.DBClient;
import sf.database.mapper.MapperInvoke;
import sf.database.mapper.annotation.ExecuteTemplate;
import sf.database.mapper.annotation.OrmParam;
import sf.database.mapper.annotation.SelectKey;
import sf.database.mapper.annotation.SqlResource;
import sf.database.support.DMLType;
import sf.database.template.CType;
import sf.tools.ArrayUtils;
import sf.tools.JavaTypeUtils;
import sf.tools.StringUtils;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* 接口执行模板
*/
public class MethodHandleTemplate implements MapperInvoke {
protected static MethodHandleTemplate ms = new MethodHandleTemplate();
public static MethodHandleTemplate getInstance() {
return ms;
}
private MethodHandleTemplate() {
}
@Override
public Object call(DBClient dbClient, Class entityClass, Method m, Object[] params) {
Object ret = null;
SqlResource resource = m.getDeclaringClass().getAnnotation(SqlResource.class);
ExecuteTemplate et = m.getAnnotation(ExecuteTemplate.class);
String sqlId = et.id();
String sql = StringUtils.join(et.value());
//是否是sqlid
boolean isSqlId = true;
if (StringUtils.isNotBlank(sqlId)) {
sql = sqlId;
} else if (StringUtils.isNotBlank(sql)) {
isSqlId = false;
} else {
if (StringUtils.isBlank(sqlId)) {
if (resource != null) {
String preffix = resource.value();
String name = m.getName();
sqlId = preffix + "." + name;
} else {
sqlId = m.getName();
}
}
sql = sqlId;
}
switch (et.type()) {
case SELECT:
ret = parseSelectList(m, dbClient, sql, params, isSqlId);
break;
case INSERT:
ret = parseInsert(m, dbClient, sql, params, et.batch(), isSqlId);
break;
default:
ret = parseUpdate(m, dbClient, sql, params, isSqlId);
break;
}
return ret;
}
public Object call(DBClient dbClient, Method m, String sqlTemplate, DMLType dmlType, Object[] params) {
Object ret = null;
//是否是sqlid
boolean isSqlId = false;
boolean isBatch = false;
switch (dmlType) {
case SELECT:
ret = parseSelectList(m, dbClient, sqlTemplate, params, isSqlId);
break;
case INSERT:
ret = parseInsert(m, dbClient, sqlTemplate, params, isBatch, isSqlId);
break;
default:
ret = parseUpdate(m, dbClient, sqlTemplate, params, isSqlId);
break;
}
return ret;
}
protected Object parseInsert(Method method, DBClient dbClient, String sql, Object[] params, boolean batch, boolean isSqlId) {
SelectKey returnKey = method.getAnnotation(SelectKey.class);
List pkeys = Collections.emptyList();
if (returnKey != null && StringUtils.isNotBlank(returnKey.keyColumn())) {
pkeys = Collections.singletonList(returnKey.keyColumn());
}
Map paraMap = new LinkedHashMap<>();
convertParam(method, params, paraMap);
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy