|
@@ -66,7 +66,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,11 +106,11 @@ public class EasyOrmSqlBuilder {
|
|
|
return javaType;
|
|
|
}
|
|
|
|
|
|
- private final RDBDatabaseMetaData mysql = new MysqlMeta();
|
|
|
- private final RDBDatabaseMetaData oracle = new OracleMeta();
|
|
|
- private final RDBDatabaseMetaData h2 = new H2Meta();
|
|
|
+ private final RDBDatabaseMetaData mysql = new MysqlMeta();
|
|
|
+ private final RDBDatabaseMetaData oracle = new OracleMeta();
|
|
|
+ private final RDBDatabaseMetaData h2 = new H2Meta();
|
|
|
private final RDBDatabaseMetaData postgresql = new PGMeta();
|
|
|
- private final RDBDatabaseMetaData mssql = new MSSQLMeta();
|
|
|
+ private final RDBDatabaseMetaData mssql = new MSSQLMeta();
|
|
|
|
|
|
private final ConcurrentMap<RDBDatabaseMetaData, Map<String, RDBTableMetaData>> metaCache = new ConcurrentHashMap<>();
|
|
|
|
|
@@ -146,7 +146,7 @@ public class EasyOrmSqlBuilder {
|
|
|
}
|
|
|
|
|
|
protected RDBTableMetaData createMeta(String tableName, String resultMapId) {
|
|
|
- tableName = getRealTableName(tableName);
|
|
|
+// tableName = getRealTableName(tableName);
|
|
|
RDBDatabaseMetaData active = getActiveDatabase();
|
|
|
String cacheKey = tableName.concat("-").concat(resultMapId);
|
|
|
Map<String, RDBTableMetaData> cache = metaCache.computeIfAbsent(active, k -> new ConcurrentHashMap<>());
|
|
@@ -155,7 +155,14 @@ public class EasyOrmSqlBuilder {
|
|
|
if (cached != null) {
|
|
|
return cached;
|
|
|
}
|
|
|
- RDBTableMetaData rdbTableMetaData = new RDBTableMetaData();
|
|
|
+
|
|
|
+ RDBTableMetaData rdbTableMetaData = new RDBTableMetaData() {
|
|
|
+ @Override
|
|
|
+ public String getName() {
|
|
|
+ //动态切换表名
|
|
|
+ return getRealTableName(tableName);
|
|
|
+ }
|
|
|
+ };
|
|
|
ResultMap resultMaps = MybatisUtils.getResultMap(resultMapId);
|
|
|
rdbTableMetaData.setName(tableName);
|
|
|
rdbTableMetaData.setDatabaseMetaData(active);
|
|
@@ -167,6 +174,9 @@ public class EasyOrmSqlBuilder {
|
|
|
RDBColumnMetaData column = new RDBColumnMetaData();
|
|
|
column.setJdbcType(JDBCType.valueOf(resultMapping.getJdbcType().name()));
|
|
|
column.setName(resultMapping.getColumn());
|
|
|
+ if (resultMapping.getTypeHandler() != null) {
|
|
|
+ column.setProperty("typeHandler", resultMapping.getTypeHandler().getClass().getName());
|
|
|
+ }
|
|
|
if (!StringUtils.isNullOrEmpty(resultMapping.getProperty())) {
|
|
|
column.setAlias(resultMapping.getProperty());
|
|
|
}
|
|
@@ -241,10 +251,14 @@ public class EasyOrmSqlBuilder {
|
|
|
appender.add(",", encodeColumn(dialect, columnMetaData.getName())
|
|
|
, "=", ((Sql) value).getSql());
|
|
|
} else {
|
|
|
+ String typeHandler = columnMetaData.getProperty("typeHandler")
|
|
|
+ .getValue();
|
|
|
+
|
|
|
appender.add(",", encodeColumn(dialect, columnMetaData.getName())
|
|
|
, "=", "#{data.", columnMetaData.getAlias(),
|
|
|
",javaType=", EasyOrmSqlBuilder.getJavaType(columnMetaData.getJavaType()),
|
|
|
",jdbcType=", columnMetaData.getJdbcType(),
|
|
|
+ typeHandler != null ? ",typeHandler=" + typeHandler : "",
|
|
|
"}");
|
|
|
}
|
|
|
});
|
|
@@ -410,6 +424,11 @@ public class EasyOrmSqlBuilder {
|
|
|
renderMap.put(SqlRender.TYPE.INSERT, new InsertSqlBuilder());
|
|
|
renderMap.put(SqlRender.TYPE.UPDATE, new UpdateSqlBuilder(Dialect.MYSQL));
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getDatabaseName() {
|
|
|
+ return DataSourceHolder.databaseSwitcher().currentDatabase();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
class OracleMeta extends OracleRDBDatabaseMetaData {
|
|
@@ -418,6 +437,11 @@ public class EasyOrmSqlBuilder {
|
|
|
renderMap.put(SqlRender.TYPE.INSERT, new InsertSqlBuilder());
|
|
|
renderMap.put(SqlRender.TYPE.UPDATE, new UpdateSqlBuilder(Dialect.ORACLE));
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getDatabaseName() {
|
|
|
+ return DataSourceHolder.databaseSwitcher().currentDatabase();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
class H2Meta extends H2RDBDatabaseMetaData {
|
|
@@ -426,6 +450,11 @@ public class EasyOrmSqlBuilder {
|
|
|
renderMap.put(SqlRender.TYPE.INSERT, new InsertSqlBuilder());
|
|
|
renderMap.put(SqlRender.TYPE.UPDATE, new UpdateSqlBuilder(Dialect.H2));
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getDatabaseName() {
|
|
|
+ return DataSourceHolder.databaseSwitcher().currentDatabase();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
class PGMeta extends PGRDBDatabaseMetaData {
|
|
@@ -434,6 +463,11 @@ public class EasyOrmSqlBuilder {
|
|
|
renderMap.put(SqlRender.TYPE.INSERT, new InsertSqlBuilder());
|
|
|
renderMap.put(SqlRender.TYPE.UPDATE, new UpdateSqlBuilder(Dialect.POSTGRES));
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getDatabaseName() {
|
|
|
+ return DataSourceHolder.databaseSwitcher().currentDatabase();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
class MSSQLMeta extends MSSQLRDBDatabaseMetaData {
|
|
@@ -442,5 +476,10 @@ public class EasyOrmSqlBuilder {
|
|
|
renderMap.put(SqlRender.TYPE.INSERT, new InsertSqlBuilder());
|
|
|
renderMap.put(SqlRender.TYPE.UPDATE, new UpdateSqlBuilder(Dialect.MSSQL));
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getDatabaseName() {
|
|
|
+ return DataSourceHolder.databaseSwitcher().currentDatabase();
|
|
|
+ }
|
|
|
}
|
|
|
}
|