优化: H2数据库支持

master
曹世达 6 months ago
parent 5bfd02174b
commit 9432db6ad1

@ -21,6 +21,12 @@
<artifactId>mysql-connector-j</artifactId>
<version>8.2.0</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.2.224</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>

@ -3,7 +3,8 @@ package space.caoshd.otone.builder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import space.caoshd.otone.entity.ColumnInfo;
import space.caoshd.otone.helper.SqlUtils;
import space.caoshd.otone.helper.SqlHelper;
import space.caoshd.otone.util.CfgUtils;
import space.caoshd.otone.util.DBUtils;
import space.caoshd.otone.util.JsonUtils;
import space.caoshd.otone.util.StrUtils;
@ -18,6 +19,8 @@ public class ColumnBuilder {
private static final Logger LOGGER = LoggerFactory.getLogger(ColumnBuilder.class);
private static final SqlHelper SQL_HELPER = new SqlHelper(CfgUtils.getSqlConfigFile());
private final String schemaName;
private final String tableName;
@ -27,7 +30,7 @@ public class ColumnBuilder {
}
public List<ColumnInfo> build() {
String sql = SqlUtils.getColumnSql();
String sql = SQL_HELPER.getColumnSql();
List<String> params = Arrays.asList(schemaName, tableName);
List<Map<String, String>> columns = DBUtils.list(sql, params);
@ -40,25 +43,25 @@ public class ColumnBuilder {
private ColumnInfo createColumnInfo(Map<String, String> column) {
ColumnInfo result = new ColumnInfo();
String columnName = SqlUtils.getLabelColumnName();
String columnName = SQL_HELPER.getLabelColumnName();
result.setColumnName(column.get(columnName));
String fieldName = StrUtils.toCamelCase(result.getColumnName(), false);
result.setFieldName(fieldName);
String fieldNameCap = StrUtils.toCamelCase(result.getColumnName(), true);
result.setFieldNameCap(fieldNameCap);
String columnComment = SqlUtils.getLabelColumnComment();
String columnComment = SQL_HELPER.getLabelColumnComment();
result.setComment(column.get(columnComment));
String dbType = SqlUtils.getLabelDataType();
String dbType = SQL_HELPER.getLabelDataType();
result.setDbType(column.get(dbType));
String javaType = TypeUtils.toJavaDataType(result.getDbType());
String javaType = TypeUtils.toJavaType(result.getDbType());
result.setJavaType(javaType);
String autoIncrement = SqlUtils.getLabelAutoIncrement();
result.setAutoIncrement(SqlUtils.VALUE_AUTO_INCREMENT_YES.equals(column.get(autoIncrement)));
String autoIncrement = SQL_HELPER.getLabelAutoIncrement();
result.setAutoIncrement(SqlHelper.VALUE_AUTO_INCREMENT_YES.equals(column.get(autoIncrement)));
String primary = SqlUtils.getLabelPrimary();
result.setPrimary(SqlUtils.VALUE_PRIMARY_YES.equals(column.get(primary)));
String primary = SQL_HELPER.getLabelPrimary();
result.setPrimary(SqlHelper.VALUE_PRIMARY_YES.equals(column.get(primary)));
LOGGER.debug(JsonUtils.toJson(result));
return result;

@ -4,7 +4,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import space.caoshd.otone.entity.ColumnInfo;
import space.caoshd.otone.entity.TableInfo;
import space.caoshd.otone.helper.SqlUtils;
import space.caoshd.otone.helper.SqlHelper;
import space.caoshd.otone.util.CfgUtils;
import space.caoshd.otone.util.DBUtils;
import space.caoshd.otone.util.JsonUtils;
@ -18,16 +18,18 @@ public class TableBuilder {
private static final Logger LOGGER = LoggerFactory.getLogger(TableBuilder.class);
private static final SqlHelper SQL_HELPER = new SqlHelper(CfgUtils.getSqlConfigFile());
public List<TableInfo> build() {
List<TableInfo> result = new ArrayList<>();
String sql = SqlUtils.getTableSql();
String sql = SQL_HELPER.getTableSql();
List<Map<String, String>> tables = DBUtils.list(sql);
for (Map<String, String> table : tables) {
List<String> tableNames = CfgUtils.getDatabaseTableIncludes();
if (tableNames.isEmpty()) {
result.add(createTableInfo(table));
} else {
if (tableNames.contains(SqlUtils.getLabelTableName())) {
if (tableNames.contains(SQL_HELPER.getLabelTableName())) {
result.add(createTableInfo(table));
}
}
@ -38,15 +40,15 @@ public class TableBuilder {
private TableInfo createTableInfo(Map<String, String> table) {
TableInfo result = new TableInfo();
String tableSchemaLabel = SqlUtils.getLabelTableSchema();
String tableSchemaLabel = SQL_HELPER.getLabelTableSchema();
String tableSchema = table.get(tableSchemaLabel);
result.setTableSchema(tableSchema);
String tableCommentLabel = SqlUtils.getLabelTableComment();
String tableCommentLabel = SQL_HELPER.getLabelTableComment();
String comment = table.get(tableCommentLabel);
result.setComment(comment);
String tableNameLabel = SqlUtils.getLabelTableName();
String tableNameLabel = SQL_HELPER.getLabelTableName();
String tableName = table.get(tableNameLabel);
result.setTableName(tableName);

@ -0,0 +1,64 @@
package space.caoshd.otone.helper;
public class SqlHelper {
public static final String TABLE_SQL = "table.sql";
public static final String COLUMN_SQL = "column.sql";
public static final String LABEL_TABLE_NAME = "label.table_name";
public static final String LABEL_TABLE_SCHEMA = "label.table_schema";
public static final String LABEL_TABLE_COMMENT = "label.table_comment";
public static final String LABEL_COLUMN_NAME = "label.column_name";
public static final String LABEL_COLUMN_COMMENT = "label.column_comment";
public static final String LABEL_DATA_TYPE = "label.data_type";
public static final String LABEL_AUTO_INCREMENT = "label.auto_increment";
public static final String LABEL_PRIMARY = "label.primary";
public static final String VALUE_AUTO_INCREMENT_YES = "1";
public static final String VALUE_PRIMARY_YES = "1";
private final PropHelper config;
public SqlHelper(String configFilePath) {
this.config = new PropHelper(configFilePath);
}
public String getTableSql() {
return config.getString(TABLE_SQL);
}
public String getColumnSql() {
return config.getString(COLUMN_SQL);
}
public String getLabelTableName() {
return config.getString(LABEL_TABLE_NAME);
}
public String getLabelTableSchema() {
return config.getString(LABEL_TABLE_SCHEMA);
}
public String getLabelTableComment() {
return config.getString(LABEL_TABLE_COMMENT);
}
public String getLabelColumnComment() {
return config.getString(LABEL_COLUMN_COMMENT);
}
public String getLabelColumnName() {
return config.getString(LABEL_COLUMN_NAME);
}
public String getLabelDataType() {
return config.getString(LABEL_DATA_TYPE);
}
public String getLabelAutoIncrement() {
return config.getString(LABEL_AUTO_INCREMENT);
}
public String getLabelPrimary() {
return config.getString(LABEL_PRIMARY);
}
}

@ -1,63 +0,0 @@
package space.caoshd.otone.helper;
import space.caoshd.otone.util.PathConsts;
public class SqlUtils {
public static final String TABLE_SQL = "table.sql";
public static final String COLUMN_SQL = "column.sql";
public static final String LABEL_TABLE_NAME = "label.table_name";
public static final String LABEL_TABLE_SCHEMA = "label.table_schema";
public static final String LABEL_TABLE_COMMENT = "label.table_comment";
public static final String LABEL_COLUMN_NAME = "label.column_name";
public static final String LABEL_COLUMN_COMMENT = "label.column_comment";
public static final String LABEL_DATA_TYPE = "label.data_type";
public static final String LABEL_AUTO_INCREMENT = "label.auto_increment";
public static final String LABEL_PRIMARY = "label.primary";
public static final String VALUE_AUTO_INCREMENT_YES = "1";
public static final String VALUE_PRIMARY_YES = "1";
private static final PropHelper CONFIG = new PropHelper(PathConsts.MYSQL_PROPERTIES_PATH);
private SqlUtils() {}
public static String getTableSql() {
return CONFIG.getString(TABLE_SQL);
}
public static String getColumnSql() {
return CONFIG.getString(COLUMN_SQL);
}
public static String getLabelTableName() {
return CONFIG.getString(LABEL_TABLE_NAME);
}
public static String getLabelTableSchema() {
return CONFIG.getString(LABEL_TABLE_SCHEMA);
}
public static String getLabelTableComment() {
return CONFIG.getString(LABEL_TABLE_COMMENT);
}
public static String getLabelColumnComment() {
return CONFIG.getString(LABEL_COLUMN_COMMENT);
}
public static String getLabelColumnName() {
return CONFIG.getString(LABEL_COLUMN_NAME);
}
public static String getLabelDataType() {
return CONFIG.getString(LABEL_DATA_TYPE);
}
public static String getLabelAutoIncrement() {
return CONFIG.getString(LABEL_AUTO_INCREMENT);
}
public static String getLabelPrimary() {
return CONFIG.getString(LABEL_PRIMARY);
}
}

@ -12,6 +12,7 @@ public class CfgUtils {
public static final String DATABASE_TABLE_PREFIXES = "database.table.prefixes";
public static final String DATABASE_TABLE_INVALID_COLUMNS = "database.table.invalid_columns";
public static final String DATABASE_TABLE_INVALID_VALUES = "database.table.invalid_values";
public static final String DATABASE_TYPE = "database.type";
// 输出配置
public static final String OUTPUT_COVER_IF_EXIST = "output.cover_if_exists";
@ -104,12 +105,25 @@ public class CfgUtils {
public static final String DEFAULT_TEMPLATE_PATH_SERVICE_INTF = "template/service.intf.vm";
public static final String DEFAULT_TEMPLATE_PATH_MAPPER = "template/mapper.vm";
public static final String DEFAULT_TEMPLATE_PATH_MAPPER_XML = "template/mapper.xml.vm";
public static final String DEFAULT_SQL_PATH_TEMPLATE = "config/%s.properties";
private static final PropHelper CONFIG = new PropHelper(PathConsts.CONFIG_PROPERTIES_PATH);
private static final String JAVA_FILE_SUFFIX = ".java";
// 私有化构造器
private CfgUtils() {}
public static String getDatabaseType() {
return CONFIG.getString(DATABASE_TYPE);
}
public static String getSqlConfigFile() {
String databaseType = getDatabaseType();
return String.format(DEFAULT_SQL_PATH_TEMPLATE, databaseType);
}
public static List<String> getDatabaseTableIncludes() {
return CONFIG.getStringList(DATABASE_TABLE_INCLUDES);
}

@ -15,12 +15,13 @@ public class TypeUtils {
public static final List<String> SQL_TYPE_STRING = Arrays.asList(
"char",
"varchar",
"character varying",
"text",
"mediumtext",
"longtext"
);
public static final List<String> SQL_TYPE_INT = Arrays.asList("int", "tinyint");
public static final List<String> SQL_TYPE_INT = Arrays.asList("integer", "int", "tinyint");
public static final List<String> SQL_TYPE_LONG = Collections.singletonList("bigint");
@ -34,26 +35,27 @@ public class TypeUtils {
public static final String JAVA_TYPE_DATE = "Date";
public static String toJavaDataType(String sqlDataType) {
if (SQL_TYPE_STRING.contains(sqlDataType)) {
public static String toJavaType(String sqlType) {
String sqlTypeLowerCase = sqlType.toLowerCase();
if (SQL_TYPE_STRING.contains(sqlTypeLowerCase)) {
return JAVA_TYPE_STRING;
}
if (SQL_TYPE_INT.contains(sqlDataType)) {
if (SQL_TYPE_INT.contains(sqlTypeLowerCase)) {
return JAVA_TYPE_INTEGER;
}
if (SQL_TYPE_LONG.contains(sqlDataType)) {
if (SQL_TYPE_LONG.contains(sqlTypeLowerCase)) {
return JAVA_TYPE_LONG;
}
if (SQL_TYPE_DATE.contains(sqlDataType)) {
if (SQL_TYPE_DATE.contains(sqlTypeLowerCase)) {
return JAVA_TYPE_DATE;
}
if (SQL_TYPE_DATE_TIME.contains(sqlDataType)) {
if (SQL_TYPE_DATE_TIME.contains(sqlTypeLowerCase)) {
return JAVA_TYPE_DATE;
}
if (SQL_TYPE_DECIMAL.contains(sqlDataType)) {
if (SQL_TYPE_DECIMAL.contains(sqlTypeLowerCase)) {
return JAVA_TYPE_DECIMAL;
}
throw new RuntimeException("unknown sql type:" + sqlDataType);
throw new RuntimeException("unknown sql type:" + sqlType);
}
}

@ -2,7 +2,7 @@ package space.caoshd.otone.util;
import org.junit.Assert;
import org.junit.Test;
import space.caoshd.otone.helper.SqlUtils;
import space.caoshd.otone.helper.SqlHelper;
import java.util.List;
import java.util.Map;
@ -11,7 +11,7 @@ public class DBUtilsTest {
@Test
public void executeQuery() {
String tableSql = SqlUtils.getTableSql();
String tableSql = new SqlHelper(CfgUtils.getSqlConfigFile()).getTableSql();
List<Map<String, String>> maps = DBUtils.list(tableSql);
Assert.assertFalse(maps.isEmpty());
}

@ -1,5 +1,6 @@
project.path.base=D:/workspace/otono-debug/
package.name.base=space.caoshd.navigator
database.type=h2
database.table.includes=
database.table.prefixes=t_,m_
output.cover_if_exists=true

@ -1,4 +1,5 @@
username=root
password=otone@132!
url=jdbc:mysql://121.43.48.195:3306/otone?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
#url=jdbc:mysql://121.43.48.195:3306/otone?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
url=jdbc:h2:~/h2db/otone
driver-class-name=com.mysql.cj.jdbc.Driver
Loading…
Cancel
Save