update 优化 数据库类型获取和判断逻辑,增强代码可读性

dev
疯狂的狮子Li 4 months ago
parent d32ba1f92f
commit 4b51157bc3

@ -42,17 +42,46 @@ public enum DataBaseType {
* *
* *
* @param databaseProductName * @param databaseProductName
* @return null * @return
*/ */
public static DataBaseType find(String databaseProductName) { public static DataBaseType find(String databaseProductName) {
if (StringUtils.isBlank(databaseProductName)) { if (StringUtils.isBlank(databaseProductName)) {
return null; return MY_SQL;
} }
for (DataBaseType type : values()) { for (DataBaseType type : values()) {
if (type.getType().equals(databaseProductName)) { if (type.getType().equals(databaseProductName)) {
return type; return type;
} }
} }
return null; return MY_SQL;
} }
/**
* MySQL
*/
public boolean isMySql() {
return this == MY_SQL;
}
/**
* Oracle
*/
public boolean isOracle() {
return this == ORACLE;
}
/**
* PostgreSQL
*/
public boolean isPostgreSql() {
return this == POSTGRE_SQL;
}
/**
* SQL Server
*/
public boolean isSqlServer() {
return this == SQL_SERVER;
}
} }

@ -26,7 +26,14 @@ public class DataBaseHelper {
private static final DynamicRoutingDataSource DS = SpringUtils.getBean(DynamicRoutingDataSource.class); private static final DynamicRoutingDataSource DS = SpringUtils.getBean(DynamicRoutingDataSource.class);
/** /**
* *
* <p>
* DynamicRoutingDataSource 线
*
* DataBaseType.find
*
* @return DataBaseType MY_SQL
* @throws ServiceException
*/ */
public static DataBaseType getDataBaseType() { public static DataBaseType getDataBaseType() {
DataSource dataSource = DS.determineDataSource(); DataSource dataSource = DS.determineDataSource();
@ -39,37 +46,31 @@ public class DataBaseHelper {
} }
} }
public static boolean isMySql() { /**
return DataBaseType.MY_SQL == getDataBaseType(); * FIND_IN_SET
} * <p>
* SQL
public static boolean isOracle() { * - Oracle 使 instr
return DataBaseType.ORACLE == getDataBaseType(); * - PostgreSQL 使 strpos
} * - SQL Server 使 charindex
* - 使 MySQL find_in_set
public static boolean isPostgerSql() { *
return DataBaseType.POSTGRE_SQL == getDataBaseType(); * @param var1
} * @param var2
* @return SQL where apply
public static boolean isSqlServer() { */
return DataBaseType.SQL_SERVER == getDataBaseType();
}
public static String findInSet(Object var1, String var2) { public static String findInSet(Object var1, String var2) {
DataBaseType dataBasyType = getDataBaseType();
String var = Convert.toStr(var1); String var = Convert.toStr(var1);
if (dataBasyType == DataBaseType.SQL_SERVER) { return switch (getDataBaseType()) {
// charindex(',100,' , ',0,100,101,') <> 0
return "charindex(',%s,' , ','+%s+',') <> 0".formatted(var, var2);
} else if (dataBasyType == DataBaseType.POSTGRE_SQL) {
// (select strpos(',0,100,101,' , ',100,')) <> 0
return "(select strpos(','||%s||',' , ',%s,')) <> 0".formatted(var2, var);
} else if (dataBasyType == DataBaseType.ORACLE) {
// instr(',0,100,101,' , ',100,') <> 0 // instr(',0,100,101,' , ',100,') <> 0
return "instr(','||%s||',' , ',%s,') <> 0".formatted(var2, var); case ORACLE -> "instr(','||%s||',' , ',%s,') <> 0".formatted(var2, var);
} // (select strpos(',0,100,101,' , ',100,')) <> 0
// find_in_set('100' , '0,100,101') case POSTGRE_SQL -> "(select strpos(','||%s||',' , ',%s,')) <> 0".formatted(var2, var);
return "find_in_set('%s' , %s) <> 0".formatted(var, var2); // charindex(',100,' , ',0,100,101,') <> 0
case SQL_SERVER -> "charindex(',%s,' , ','+%s+',') <> 0".formatted(var, var2);
// find_in_set(100 , '0,100,101')
default -> "find_in_set('%s' , %s) <> 0".formatted(var, var2);
};
} }
/** /**

@ -1,4 +1,4 @@
package org.dromara.gen.util; package org.dromara.generator.util;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
@ -9,6 +9,7 @@ import org.apache.velocity.VelocityContext;
import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.mybatis.enums.DataBaseType;
import org.dromara.common.mybatis.helper.DataBaseHelper; import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.gen.constant.GenConstants; import org.dromara.gen.constant.GenConstants;
import org.dromara.gen.domain.GenTable; import org.dromara.gen.domain.GenTable;
@ -118,10 +119,13 @@ public class VelocityUtils {
templates.add("vm/java/serviceImpl.java.vm"); templates.add("vm/java/serviceImpl.java.vm");
templates.add("vm/java/controller.java.vm"); templates.add("vm/java/controller.java.vm");
templates.add("vm/xml/mapper.xml.vm"); templates.add("vm/xml/mapper.xml.vm");
if (DataBaseHelper.isOracle()) { DataBaseType dataBaseType = DataBaseHelper.getDataBaseType();
if (dataBaseType.isOracle()) {
templates.add("vm/sql/oracle/sql.vm"); templates.add("vm/sql/oracle/sql.vm");
} else if (DataBaseHelper.isPostgerSql()) { } else if (dataBaseType.isPostgreSql()) {
templates.add("vm/sql/postgres/sql.vm"); templates.add("vm/sql/postgres/sql.vm");
} else if (dataBaseType.isSqlServer()) {
templates.add("vm/sql/sqlserver/sql.vm");
} else { } else {
templates.add("vm/sql/sql.vm"); templates.add("vm/sql/sql.vm");
} }

Loading…
Cancel
Save