|
@@ -39,6 +39,7 @@ import org.hswebframework.ezorm.rdb.render.dialect.OracleRDBDatabaseMetaData;
|
|
|
import org.hswebframework.ezorm.rdb.render.support.simple.CommonSqlRender;
|
|
|
import org.hswebframework.ezorm.rdb.render.support.simple.SimpleWhereSqlBuilder;
|
|
|
import org.hswebframework.web.BusinessException;
|
|
|
+import org.hswebframework.web.commons.entity.Entity;
|
|
|
import org.hswebframework.web.commons.entity.factory.EntityFactory;
|
|
|
import org.hswebframework.web.dao.mybatis.builder.jpa.JpaAnnotationParser;
|
|
|
import org.hswebframework.web.dao.mybatis.mapper.EnumDicTermTypeMapper;
|
|
@@ -50,6 +51,7 @@ import org.hswebframework.web.dao.mybatis.MybatisUtils;
|
|
|
import org.hswebframework.utils.StringUtils;
|
|
|
import org.hswebframework.web.datasource.DataSourceHolder;
|
|
|
import org.hswebframework.web.datasource.DatabaseType;
|
|
|
+import org.hswebframework.web.proxy.Proxy;
|
|
|
|
|
|
import java.sql.JDBCType;
|
|
|
import java.util.*;
|
|
@@ -70,7 +72,7 @@ public class EasyOrmSqlBuilder {
|
|
|
|
|
|
public EntityFactory entityFactory;
|
|
|
|
|
|
- private static final EasyOrmSqlBuilder instance = new EasyOrmSqlBuilder();
|
|
|
+ private static final EasyOrmSqlBuilder instance = new EasyOrmSqlBuilder();
|
|
|
protected static final Map<Class, String> simpleName = new HashMap<>();
|
|
|
|
|
|
protected PropertyUtilsBean propertyUtils = BeanUtilsBean.getInstance().getPropertyUtils();
|
|
@@ -106,24 +108,24 @@ public class EasyOrmSqlBuilder {
|
|
|
Dialect.MYSQL.setTermTypeMapper(TermType.not, supportArray(new EnumDicTermTypeMapper(Dialect.MYSQL, true)));
|
|
|
Dialect.MYSQL.setTermTypeMapper(TermType.nin, supportArray(new MysqlEnumDicInTermTypeMapper(true)));
|
|
|
|
|
|
- Dialect.MYSQL.setTermTypeMapper("ain", supportArray(new MysqlEnumDicInTermTypeMapper(true,true)));
|
|
|
- Dialect.MYSQL.setTermTypeMapper("anin", supportArray(new MysqlEnumDicInTermTypeMapper(false,true)));
|
|
|
+ Dialect.MYSQL.setTermTypeMapper("ain", supportArray(new MysqlEnumDicInTermTypeMapper(true, true)));
|
|
|
+ Dialect.MYSQL.setTermTypeMapper("anin", supportArray(new MysqlEnumDicInTermTypeMapper(false, true)));
|
|
|
|
|
|
|
|
|
Dialect.H2.setTermTypeMapper(TermType.eq, supportArray(new EnumDicTermTypeMapper(Dialect.H2, false)));
|
|
|
Dialect.H2.setTermTypeMapper(TermType.in, supportArray(new H2EnumDicInTermTypeMapper(false)));
|
|
|
Dialect.H2.setTermTypeMapper(TermType.not, supportArray(new EnumDicTermTypeMapper(Dialect.H2, true)));
|
|
|
Dialect.H2.setTermTypeMapper(TermType.nin, supportArray(new H2EnumDicInTermTypeMapper(true)));
|
|
|
- Dialect.H2.setTermTypeMapper("ain", supportArray(new H2EnumDicInTermTypeMapper(true,true)));
|
|
|
- Dialect.H2.setTermTypeMapper("anin", supportArray(new H2EnumDicInTermTypeMapper(false,true)));
|
|
|
+ Dialect.H2.setTermTypeMapper("ain", supportArray(new H2EnumDicInTermTypeMapper(true, true)));
|
|
|
+ Dialect.H2.setTermTypeMapper("anin", supportArray(new H2EnumDicInTermTypeMapper(false, true)));
|
|
|
|
|
|
|
|
|
Dialect.ORACLE.setTermTypeMapper(TermType.eq, supportArray(new EnumDicTermTypeMapper(Dialect.ORACLE, false)));
|
|
|
Dialect.ORACLE.setTermTypeMapper(TermType.in, supportArray(new OracleEnumDicInTermTypeMapper(false)));
|
|
|
Dialect.ORACLE.setTermTypeMapper(TermType.not, supportArray(new EnumDicTermTypeMapper(Dialect.ORACLE, true)));
|
|
|
Dialect.ORACLE.setTermTypeMapper(TermType.nin, supportArray(new OracleEnumDicInTermTypeMapper(true)));
|
|
|
- Dialect.ORACLE.setTermTypeMapper("ain", supportArray(new OracleEnumDicInTermTypeMapper(true,true)));
|
|
|
- Dialect.ORACLE.setTermTypeMapper("anin", supportArray(new OracleEnumDicInTermTypeMapper(false,true)));
|
|
|
+ Dialect.ORACLE.setTermTypeMapper("ain", supportArray(new OracleEnumDicInTermTypeMapper(true, true)));
|
|
|
+ Dialect.ORACLE.setTermTypeMapper("anin", supportArray(new OracleEnumDicInTermTypeMapper(false, true)));
|
|
|
|
|
|
}
|
|
|
|
|
@@ -135,9 +137,9 @@ public class EasyOrmSqlBuilder {
|
|
|
return javaType;
|
|
|
}
|
|
|
|
|
|
- private final RDBDatabaseMetaData mysql = new MysqlMeta();
|
|
|
+ private final RDBDatabaseMetaData mysql = new MysqlMeta();
|
|
|
private final RDBDatabaseMetaData oracle = new OracleMeta();
|
|
|
- private final RDBDatabaseMetaData h2 = new H2Meta();
|
|
|
+ private final RDBDatabaseMetaData h2 = new H2Meta();
|
|
|
|
|
|
private final ConcurrentMap<RDBDatabaseMetaData, Map<String, RDBTableMetaData>> metaCache = new ConcurrentHashMap<RDBDatabaseMetaData, Map<String, RDBTableMetaData>>() {
|
|
|
@Override
|
|
@@ -308,7 +310,11 @@ public class EasyOrmSqlBuilder {
|
|
|
return render.render(tableMetaData, param).getSql();
|
|
|
}
|
|
|
|
|
|
- public String buildSelectFields(String resultMapId, String tableName, QueryParam param) {
|
|
|
+ public String buildSelectFields(String resultMapId, String tableName, Object arg) {
|
|
|
+ QueryParam param = null;
|
|
|
+ if (arg instanceof QueryParam) {
|
|
|
+ param = ((QueryParam) arg);
|
|
|
+ }
|
|
|
if (param == null) {
|
|
|
return "*";
|
|
|
}
|
|
@@ -348,10 +354,15 @@ public class EasyOrmSqlBuilder {
|
|
|
return appender.toString();
|
|
|
}
|
|
|
|
|
|
- public String buildOrder(String resultMapId, String tableName, QueryParam param) {
|
|
|
+ public String buildOrder(String resultMapId, String tableName, Object arg) {
|
|
|
+ QueryParam param = null;
|
|
|
+ if (arg instanceof QueryParam) {
|
|
|
+ param = ((QueryParam) arg);
|
|
|
+ }
|
|
|
if (param == null) {
|
|
|
return "";
|
|
|
}
|
|
|
+
|
|
|
RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId);
|
|
|
SqlAppender appender = new SqlAppender(" order by ");
|
|
|
param.getSorts()
|
|
@@ -384,6 +395,26 @@ public class EasyOrmSqlBuilder {
|
|
|
return where;
|
|
|
}
|
|
|
|
|
|
+ public String buildWhereForUpdate(String resultMapId, String tableName, Object param) {
|
|
|
+ String where = buildWhere(resultMapId, tableName, param);
|
|
|
+ if (where.trim().isEmpty()) {
|
|
|
+ throw new BusinessException("禁止执行无条件的更新操作");
|
|
|
+ }
|
|
|
+ return where;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String buildWhere(String resultMapId, String tableName, Object param) {
|
|
|
+ List<Term> terms;
|
|
|
+ if (param instanceof Param) {
|
|
|
+ terms = ((Param) param).getTerms();
|
|
|
+ } else if (param instanceof Entity) {
|
|
|
+ terms = SqlParamParser.parseQueryParam(param).getTerms();
|
|
|
+ } else {
|
|
|
+ terms = new ArrayList<>();
|
|
|
+ }
|
|
|
+ return buildWhere(resultMapId, tableName, terms);
|
|
|
+ }
|
|
|
+
|
|
|
public String buildWhere(String resultMapId, String tableName, List<Term> terms) {
|
|
|
RDBTableMetaData tableMetaData = createMeta(tableName, resultMapId);
|
|
|
RDBDatabaseMetaData databaseMetaDate = getActiveDatabase();
|