upgrade:升级autotable和mybatis-flex到最新版本
This commit is contained in:
4
pom.xml
4
pom.xml
@@ -18,8 +18,8 @@
|
||||
<properties>
|
||||
<java.version>17</java.version>
|
||||
<lombok.version>1.18.34</lombok.version>
|
||||
<mybatis-flex.version>1.9.6</mybatis-flex.version>
|
||||
<mybatis-flex.ext.version>1.9.6.034-beta</mybatis-flex.ext.version>
|
||||
<mybatis-flex.version>1.10.8</mybatis-flex.version>
|
||||
<mybatis-flex.ext.version>1.10.8.110</mybatis-flex.ext.version>
|
||||
<hutool.version>5.8.26</hutool.version>
|
||||
<ognl.version>3.3.2</ognl.version>
|
||||
<fastjson2.version>2.0.51</fastjson2.version>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.cool;
|
||||
|
||||
import com.cool.core.util.PathUtils;
|
||||
import com.tangzc.autotable.springboot.EnableAutoTable;
|
||||
import java.util.List;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.autotable.springboot.EnableAutoTable;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package com.cool.core.autotable;
|
||||
|
||||
import com.tangzc.autotable.annotation.ColumnType;
|
||||
import com.tangzc.autotable.core.constants.DatabaseDialect;
|
||||
import com.tangzc.autotable.core.converter.DatabaseTypeAndLength;
|
||||
import com.tangzc.autotable.core.converter.JavaTypeToDatabaseTypeConverter;
|
||||
import com.tangzc.autotable.core.strategy.pgsql.data.PgsqlDefaultTypeEnum;
|
||||
import com.tangzc.autotable.core.utils.StringUtils;
|
||||
import com.tangzc.autotable.core.utils.TableBeanUtils;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import org.dromara.autotable.annotation.ColumnType;
|
||||
import org.dromara.autotable.core.constants.DatabaseDialect;
|
||||
import org.dromara.autotable.core.converter.DatabaseTypeAndLength;
|
||||
import org.dromara.autotable.core.converter.JavaTypeToDatabaseTypeConverter;
|
||||
import org.dromara.autotable.core.strategy.pgsql.data.PgsqlDefaultTypeEnum;
|
||||
import org.dromara.autotable.core.utils.StringUtils;
|
||||
import org.dromara.autotable.core.utils.TableBeanUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
|
||||
@@ -6,12 +6,12 @@ import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.core.activerecord.Model;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.tangzc.autotable.annotation.Ignore;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Ignore;
|
||||
|
||||
/**
|
||||
* 基础实体类
|
||||
|
||||
@@ -3,8 +3,8 @@ package com.cool.core.init;
|
||||
import com.cool.core.plugin.service.CoolPluginService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
@@ -13,12 +13,12 @@ import org.springframework.stereotype.Component;
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class CoolPluginInit implements ApplicationRunner {
|
||||
public class CoolPluginInit {
|
||||
|
||||
final private CoolPluginService coolPluginService;
|
||||
|
||||
@Override
|
||||
public void run(ApplicationArguments args) {
|
||||
@EventListener(ApplicationReadyEvent.class)
|
||||
public void run() {
|
||||
coolPluginService.init();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,9 +24,9 @@ import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -37,7 +37,7 @@ import org.springframework.stereotype.Component;
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class DBFromJsonInit implements ApplicationRunner {
|
||||
public class DBFromJsonInit {
|
||||
|
||||
final private BaseSysConfService baseSysConfService;
|
||||
|
||||
@@ -50,8 +50,8 @@ public class DBFromJsonInit implements ApplicationRunner {
|
||||
@Value("${cool.initData}")
|
||||
private boolean initData;
|
||||
|
||||
@Override
|
||||
public void run(ApplicationArguments args) {
|
||||
@EventListener(ApplicationReadyEvent.class)
|
||||
public void run() {
|
||||
if (!initData) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@ package com.cool.core.init;
|
||||
import com.cool.core.leaf.IDGenService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
@@ -13,12 +13,12 @@ import org.springframework.stereotype.Component;
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class IDGenInit implements ApplicationRunner {
|
||||
public class IDGenInit {
|
||||
|
||||
final private IDGenService idGenService;
|
||||
|
||||
@Override
|
||||
public void run(ApplicationArguments args) {
|
||||
@EventListener(ApplicationReadyEvent.class)
|
||||
public void run() {
|
||||
idGenService.init();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import lombok.Setter;
|
||||
@Table(value = "leaf_alloc", comment = "唯一id分配")
|
||||
public class LeafAllocEntity extends BaseEntity<LeafAllocEntity> {
|
||||
|
||||
@UniIndex
|
||||
@UniIndex(name = "uk_key")
|
||||
@ColumnDefine(comment = "业务key ,比如orderId", length = 20, notNull = true)
|
||||
private String key;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.cool.core.util;
|
||||
import com.cool.core.exception.CoolPreconditions;
|
||||
import com.tangzc.autotable.core.constants.DatabaseDialect;
|
||||
import org.dromara.autotable.core.constants.DatabaseDialect;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DatabaseMetaData;
|
||||
import java.sql.SQLException;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
package com.cool.modules.base.entity.sys;
|
||||
|
||||
import com.cool.core.base.BaseEntity;
|
||||
import com.tangzc.autotable.annotation.enums.IndexTypeEnum;
|
||||
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.tangzc.autotable.annotation.Index;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Index;
|
||||
import org.dromara.autotable.annotation.enums.IndexTypeEnum;
|
||||
|
||||
/**
|
||||
* 系统配置
|
||||
|
||||
@@ -2,12 +2,12 @@ package com.cool.modules.base.entity.sys;
|
||||
|
||||
import com.cool.core.base.BaseEntity;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.core.handler.Fastjson2TypeHandler;
|
||||
import com.tangzc.autotable.annotation.Index;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.mybatisflex.core.handler.Fastjson2TypeHandler;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Index;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
|
||||
@@ -3,11 +3,11 @@ package com.cool.modules.base.entity.sys;
|
||||
import com.cool.core.base.BaseEntity;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.tangzc.autotable.annotation.Index;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import java.util.List;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Index;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
|
||||
@@ -2,10 +2,10 @@ package com.cool.modules.base.entity.sys;
|
||||
|
||||
import com.cool.core.base.BaseEntity;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.tangzc.autotable.annotation.Index;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Index;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
|
||||
@@ -4,12 +4,12 @@ import com.cool.core.base.BaseEntity;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.mybatisflex.core.handler.Fastjson2TypeHandler;
|
||||
import com.tangzc.autotable.annotation.Index;
|
||||
import com.tangzc.autotable.annotation.enums.IndexTypeEnum;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import java.util.List;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Index;
|
||||
import org.dromara.autotable.annotation.enums.IndexTypeEnum;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
|
||||
@@ -3,11 +3,11 @@ package com.cool.modules.base.entity.sys;
|
||||
import com.cool.core.base.BaseEntity;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.tangzc.autotable.annotation.Index;
|
||||
import com.tangzc.autotable.annotation.enums.IndexTypeEnum;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Index;
|
||||
import org.dromara.autotable.annotation.enums.IndexTypeEnum;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
|
||||
@@ -2,10 +2,10 @@ package com.cool.modules.base.entity.sys;
|
||||
|
||||
import com.cool.core.base.BaseEntity;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.tangzc.autotable.annotation.Index;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Index;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
|
||||
@@ -4,10 +4,6 @@ import com.cool.core.exception.CoolPreconditions;
|
||||
import com.cool.modules.base.dto.sys.CodeContentDto;
|
||||
import com.cool.modules.base.service.sys.BaseCodingService;
|
||||
import com.google.googlejavaformat.java.Formatter;
|
||||
import com.google.googlejavaformat.java.FormatterException;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
@@ -16,6 +12,8 @@ import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class BaseCodingServiceImpl implements BaseCodingService {
|
||||
@@ -81,7 +79,7 @@ public class BaseCodingServiceImpl implements BaseCodingService {
|
||||
public String formatContent(String content) {
|
||||
Formatter formatter = new Formatter();
|
||||
try {
|
||||
// return formatter.formatSource(content);
|
||||
return formatter.formatSource(content);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
return content;
|
||||
|
||||
@@ -26,8 +26,8 @@ import com.cool.modules.base.service.sys.BaseSysUserService;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.core.update.UpdateChain;
|
||||
import com.tangzc.autotable.core.constants.DatabaseDialect;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.autotable.core.constants.DatabaseDialect;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
|
||||
@@ -6,13 +6,13 @@ import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.mybatisflex.core.handler.Fastjson2TypeHandler;
|
||||
import com.mybatisflex.core.handler.JacksonTypeHandler;
|
||||
import com.tangzc.autotable.annotation.Ignore;
|
||||
import com.tangzc.autotable.annotation.Index;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.UniIndex;
|
||||
import java.util.Map;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Ignore;
|
||||
import org.dromara.autotable.annotation.Index;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
|
||||
@@ -4,13 +4,13 @@ import com.cool.core.base.BaseEntity;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.mybatisflex.core.handler.Fastjson2TypeHandler;
|
||||
import com.tangzc.autotable.annotation.Ignore;
|
||||
import com.tangzc.autotable.annotation.Index;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Ignore;
|
||||
import org.dromara.autotable.annotation.Index;
|
||||
|
||||
/**
|
||||
* 数据回收站 软删除的时候数据会回收到该表
|
||||
|
||||
@@ -3,11 +3,11 @@ package com.cool.modules.space.entity;
|
||||
import com.cool.core.base.BaseEntity;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.tangzc.autotable.annotation.Ignore;
|
||||
import com.tangzc.autotable.annotation.Index;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Ignore;
|
||||
import org.dromara.autotable.annotation.Index;
|
||||
|
||||
/**
|
||||
* 文件空间信息
|
||||
|
||||
@@ -2,12 +2,11 @@ package com.cool.modules.task.entity;
|
||||
|
||||
import com.cool.core.base.BaseEntity;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.tangzc.autotable.annotation.Index;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Index;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
|
||||
@@ -3,8 +3,8 @@ package com.cool.modules.task.event;
|
||||
import com.cool.modules.task.service.TaskInfoService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
@@ -13,12 +13,12 @@ import org.springframework.stereotype.Component;
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class TaskEvent implements ApplicationRunner {
|
||||
public class TaskEvent {
|
||||
|
||||
final private TaskInfoService taskInfoService;
|
||||
|
||||
@Override
|
||||
public void run(ApplicationArguments args) throws Exception {
|
||||
@EventListener(ApplicationReadyEvent.class)
|
||||
public void run() throws Exception {
|
||||
taskInfoService.init();
|
||||
log.info("初始化任务");
|
||||
}
|
||||
|
||||
@@ -2,10 +2,10 @@ package com.cool.modules.user.entity;
|
||||
|
||||
import com.cool.core.base.BaseEntity;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.tangzc.autotable.annotation.Index;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Index;
|
||||
|
||||
/**
|
||||
* 用户模块-收货地址
|
||||
|
||||
@@ -2,11 +2,11 @@ package com.cool.modules.user.entity;
|
||||
|
||||
import com.cool.core.base.BaseEntity;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.tangzc.autotable.annotation.Index;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.ColumnDefine;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.UniIndex;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.autotable.annotation.Index;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
package org.dromara.autotable.core.strategy.mysql.builder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.autotable.annotation.enums.IndexTypeEnum;
|
||||
import org.dromara.autotable.core.strategy.IndexMetadata;
|
||||
import org.dromara.autotable.core.strategy.mysql.data.MysqlColumnMetadata;
|
||||
import org.dromara.autotable.core.strategy.mysql.data.MysqlTableMetadata;
|
||||
import org.dromara.autotable.core.utils.StringConnectHelper;
|
||||
import org.dromara.autotable.core.utils.StringUtils;
|
||||
|
||||
/**
|
||||
* @author don
|
||||
* 临时解决:https://gitee.com/dromara/auto-table/issues/IBPYHU
|
||||
*/
|
||||
@Slf4j
|
||||
public class CreateTableSqlBuilder {
|
||||
|
||||
/**
|
||||
* 构建创建新表的SQL
|
||||
*
|
||||
* @param mysqlTableMetadata 参数
|
||||
* @return sql
|
||||
*/
|
||||
public static String buildSql(MysqlTableMetadata mysqlTableMetadata) {
|
||||
|
||||
String name = mysqlTableMetadata.getTableName();
|
||||
List<MysqlColumnMetadata> mysqlColumnMetadataList = mysqlTableMetadata.getColumnMetadataList();
|
||||
List<IndexMetadata> indexMetadataList = mysqlTableMetadata.getIndexMetadataList();
|
||||
String collate = mysqlTableMetadata.getCollate();
|
||||
String engine = mysqlTableMetadata.getEngine();
|
||||
String characterSet = mysqlTableMetadata.getCharacterSet();
|
||||
String comment = mysqlTableMetadata.getComment();
|
||||
|
||||
// 记录所有修改项,(利用数组结构,便于添加,分割)
|
||||
List<String> addItems = new ArrayList<>();
|
||||
|
||||
// 获取所有主键(至于表字段处理之前,为了主键修改notnull)
|
||||
List<String> primaries = new ArrayList<>();
|
||||
mysqlColumnMetadataList.forEach(columnData -> {
|
||||
// 判断是主键,自动设置为NOT NULL,并记录
|
||||
if (columnData.isPrimary()) {
|
||||
columnData.setNotNull(true);
|
||||
primaries.add(columnData.getName());
|
||||
}
|
||||
});
|
||||
|
||||
// 表字段处理
|
||||
addItems.add(
|
||||
mysqlColumnMetadataList.stream()
|
||||
.sorted(Comparator.comparingInt(MysqlColumnMetadata::getPosition))
|
||||
// 拼接每个字段的sql片段
|
||||
.map(ColumnSqlBuilder::buildSql)
|
||||
.collect(Collectors.joining(","))
|
||||
);
|
||||
|
||||
|
||||
// 主键
|
||||
if (!primaries.isEmpty()) {
|
||||
String primaryKeySql = getPrimaryKeySql(primaries);
|
||||
addItems.add(primaryKeySql);
|
||||
}
|
||||
|
||||
// 索引
|
||||
addItems.add(
|
||||
indexMetadataList.stream()
|
||||
// 例子: UNIQUE INDEX `unique_name_age`(`name` ASC, `age` DESC) COMMENT '姓名、年龄索引' USING BTREE
|
||||
.map(CreateTableSqlBuilder::getIndexSql)
|
||||
// 同类型的索引,排在一起,SQL美化
|
||||
.sorted()
|
||||
.collect(Collectors.joining(","))
|
||||
);
|
||||
|
||||
List<String> tableProperties = getTableProperties(engine, characterSet, collate, comment);
|
||||
|
||||
// 组合sql: 过滤空字符项,逗号拼接
|
||||
String addSql = addItems.stream()
|
||||
.filter(StringUtils::hasText)
|
||||
.collect(Collectors.joining(","));
|
||||
String propertiesSql = tableProperties.stream()
|
||||
.filter(StringUtils::hasText)
|
||||
.collect(Collectors.joining(","));
|
||||
|
||||
return "CREATE TABLE `{tableName}` ({addItems}) {tableProperties};"
|
||||
.replace("{tableName}", name)
|
||||
.replace("{addItems}", addSql)
|
||||
.replace("{tableProperties}", propertiesSql);
|
||||
}
|
||||
|
||||
public static List<String> getTableProperties(String engine, String characterSet, String collate, String comment) {
|
||||
List<String> tableProperties = new ArrayList<>();
|
||||
|
||||
// 引擎
|
||||
if (StringUtils.hasText(engine)) {
|
||||
tableProperties.add("ENGINE = " + engine);
|
||||
}
|
||||
// 字符集
|
||||
if (StringUtils.hasText(characterSet)) {
|
||||
tableProperties.add("CHARACTER SET = " + characterSet);
|
||||
}
|
||||
// 排序
|
||||
if (StringUtils.hasText(collate)) {
|
||||
tableProperties.add("COLLATE = " + collate);
|
||||
}
|
||||
// 备注
|
||||
if (StringUtils.hasText(comment)) {
|
||||
tableProperties.add(
|
||||
"COMMENT = '{comment}'"
|
||||
.replace("{comment}", comment)
|
||||
);
|
||||
}
|
||||
return tableProperties;
|
||||
}
|
||||
|
||||
public static String getIndexSql(IndexMetadata indexMetadata) {
|
||||
// 例子: UNIQUE INDEX `unique_name_age`(`name` ASC, `age` DESC) COMMENT '姓名、年龄索引',
|
||||
return StringConnectHelper.newInstance("{indexType} INDEX {indexName}({columns}) {method} {indexComment}")
|
||||
.replace("{indexType}", indexMetadata.getType() == IndexTypeEnum.UNIQUE ? "UNIQUE" : "")
|
||||
.replace("{indexName}", indexMetadata.getName())
|
||||
.replace("{columns}", () -> {
|
||||
List<IndexMetadata.IndexColumnParam> columnParams = indexMetadata.getColumns();
|
||||
return columnParams.stream().map(column ->
|
||||
// 例:name ASC
|
||||
"`{column}` {sortMode}"
|
||||
.replace("{column}", column.getColumn())
|
||||
.replace("{sortMode}", column.getSort() != null ? column.getSort().name() : "")
|
||||
).collect(Collectors.joining(","));
|
||||
})
|
||||
.replace("{method}", StringUtils.hasText(indexMetadata.getMethod()) ? "USING " + indexMetadata.getMethod() : "")
|
||||
.replace("{indexComment}", StringUtils.hasText(indexMetadata.getComment()) ? "COMMENT '" + indexMetadata.getComment() + "'" : "")
|
||||
.toString();
|
||||
}
|
||||
|
||||
public static String getPrimaryKeySql(List<String> primaries) {
|
||||
return "PRIMARY KEY ({primaries})"
|
||||
.replace(
|
||||
"{primaries}",
|
||||
String.join(",", primaries)
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user