upgrade:升级autotable和mybatis-flex到最新版本

This commit is contained in:
ruying408
2025-03-09 09:27:20 +08:00
parent f9131ab633
commit 143e729590
26 changed files with 204 additions and 64 deletions

View File

@@ -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>

View File

@@ -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;

View File

@@ -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

View File

@@ -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;
/**
* 基础实体类

View File

@@ -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();
}
}

View File

@@ -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;
}

View File

@@ -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();
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
/**
* 系统配置

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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;
/**

View File

@@ -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

View File

@@ -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;
/**
* 数据回收站 软删除的时候数据会回收到该表

View File

@@ -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;
/**
* 文件空间信息

View File

@@ -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

View File

@@ -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("初始化任务");
}

View File

@@ -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;
/**
* 用户模块-收货地址

View File

@@ -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

View File

@@ -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)
);
}
}