🚧 优化后端代码
This commit is contained in:
parent
132c03a4ef
commit
5ef135de32
|
@ -1,13 +1,12 @@
|
|||
package cn.bunny.controller;
|
||||
|
||||
import cn.bunny.core.factory.ConcreteSqlParserDatabaseInfo;
|
||||
import cn.bunny.core.factory.ConcreteSqlParserDatabaseInfoService;
|
||||
import cn.bunny.domain.entity.ColumnMetaData;
|
||||
import cn.bunny.domain.entity.TableMetaData;
|
||||
import cn.bunny.domain.result.Result;
|
||||
import cn.bunny.service.SqlParserService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
@ -17,23 +16,22 @@ import java.util.List;
|
|||
@Tag(name = "解析SQL", description = "解析SQL接口")
|
||||
@RestController
|
||||
@RequestMapping("/api/sqlParser")
|
||||
@RequiredArgsConstructor
|
||||
public class SqlParserController {
|
||||
|
||||
@Resource
|
||||
private SqlParserService sqlParserService;
|
||||
private final ConcreteSqlParserDatabaseInfoService sqlParserService;
|
||||
|
||||
@Operation(summary = "解析SQL成表信息", description = "解析SQL成表信息")
|
||||
@PostMapping("tableInfo")
|
||||
public Result<TableMetaData> tableInfo(String sql) {
|
||||
TableMetaData vo = sqlParserService.tableInfo(sql);
|
||||
TableMetaData vo = sqlParserService.getTableMetadata(sql);
|
||||
return Result.success(vo);
|
||||
}
|
||||
|
||||
@Operation(summary = "解析SQL成列数据", description = "解析SQL成列数据")
|
||||
@PostMapping("columnMetaData")
|
||||
public Result<List<ColumnMetaData>> columnMetaData(String sql) {
|
||||
ConcreteSqlParserDatabaseInfo databaseInfoCore = new ConcreteSqlParserDatabaseInfo();
|
||||
List<ColumnMetaData> vo = databaseInfoCore.tableColumnInfo(sql);
|
||||
List<ColumnMetaData> vo = sqlParserService.tableColumnInfo(sql);
|
||||
return Result.success(vo);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package cn.bunny.controller;
|
||||
|
||||
import cn.bunny.core.factory.ConcreteDatabaseInfoService;
|
||||
import cn.bunny.domain.entity.ColumnMetaData;
|
||||
import cn.bunny.domain.entity.DatabaseInfoMetaData;
|
||||
import cn.bunny.domain.entity.TableMetaData;
|
||||
|
@ -7,7 +8,7 @@ import cn.bunny.domain.result.Result;
|
|||
import cn.bunny.service.TableService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
@ -17,11 +18,11 @@ import java.util.List;
|
|||
@Tag(name = "数据库表控制器", description = "数据库表信息接口")
|
||||
@RestController
|
||||
@RequestMapping("/api/table")
|
||||
@RequiredArgsConstructor
|
||||
public class TableController {
|
||||
|
||||
@Resource
|
||||
private TableService tableService;
|
||||
|
||||
private final TableService tableService;
|
||||
private final ConcreteDatabaseInfoService concreteDatabaseInfoService;
|
||||
|
||||
@Operation(summary = "当前数据库信息", description = "当前连接的数据库信息")
|
||||
@GetMapping("databaseInfoMetaData")
|
||||
|
@ -33,21 +34,21 @@ public class TableController {
|
|||
@Operation(summary = "数据库所有的表", description = "获取[当前/所有]数据库表")
|
||||
@GetMapping("databaseTableList")
|
||||
public Result<List<TableMetaData>> databaseTableList(String dbName) {
|
||||
List<TableMetaData> list = tableService.databaseTableList(dbName);
|
||||
List<TableMetaData> list = concreteDatabaseInfoService.databaseTableList(dbName);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@Operation(summary = "表属性", description = "获取当前查询表属性")
|
||||
@GetMapping("tableMetaData")
|
||||
public Result<TableMetaData> tableMetaData(String tableName) {
|
||||
TableMetaData tableMetaData = tableService.tableMetaData(tableName);
|
||||
TableMetaData tableMetaData = concreteDatabaseInfoService.getTableMetadata(tableName);
|
||||
return Result.success(tableMetaData);
|
||||
}
|
||||
|
||||
@Operation(summary = "表的列属性", description = "获取当前查询表中列属性")
|
||||
@GetMapping("tableColumnInfo")
|
||||
public Result<List<ColumnMetaData>> tableColumnInfo(String tableName) {
|
||||
List<ColumnMetaData> columnInfo = tableService.tableColumnInfo(tableName);
|
||||
List<ColumnMetaData> columnInfo = concreteDatabaseInfoService.tableColumnInfo(tableName);
|
||||
return Result.success(columnInfo);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ import java.sql.ResultSet;
|
|||
import java.util.*;
|
||||
|
||||
@Component
|
||||
public class ConcreteDatabaseInfo extends AbstractDatabaseInfo {
|
||||
public class ConcreteDatabaseInfoService extends AbstractDatabaseInfo {
|
||||
|
||||
@Value("${bunny.master.database}")
|
||||
private String currentDatabase;
|
|
@ -2,6 +2,7 @@ package cn.bunny.core.factory;
|
|||
|
||||
import cn.bunny.domain.entity.ColumnMetaData;
|
||||
import cn.bunny.domain.entity.TableMetaData;
|
||||
import cn.bunny.exception.GeneratorCodeException;
|
||||
import cn.bunny.utils.TypeConvertUtil;
|
||||
import net.sf.jsqlparser.JSQLParserException;
|
||||
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
|
||||
|
@ -15,13 +16,15 @@ import java.util.regex.Matcher;
|
|||
import java.util.regex.Pattern;
|
||||
|
||||
@Component
|
||||
public class ConcreteSqlParserDatabaseInfo extends AbstractDatabaseInfo {
|
||||
public class ConcreteSqlParserDatabaseInfoService extends AbstractDatabaseInfo {
|
||||
|
||||
/**
|
||||
* 解析 sql 表信息
|
||||
* 先解析SQL语句,解析列字段信息
|
||||
*
|
||||
* @param sql 表名称或sql
|
||||
* @return 表西悉尼
|
||||
* @see CCJSqlParserUtil 使用这个工具进行SQL的解析
|
||||
*/
|
||||
@Override
|
||||
public TableMetaData getTableMetadata(String sql) {
|
||||
|
@ -32,8 +35,9 @@ public class ConcreteSqlParserDatabaseInfo extends AbstractDatabaseInfo {
|
|||
try {
|
||||
statement = CCJSqlParserUtil.parse(sql);
|
||||
} catch (JSQLParserException e) {
|
||||
throw new RuntimeException("SQL解析失败");
|
||||
throw new GeneratorCodeException("SQL解析失败");
|
||||
}
|
||||
|
||||
if (!(statement instanceof CreateTable createTable)) {
|
||||
throw new IllegalArgumentException("缺少SQL语句");
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package cn.bunny.domain.entity;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
@ -11,23 +12,25 @@ import java.util.List;
|
|||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Schema(name = "TableMetaData", description = "表信息数据")
|
||||
public class TableMetaData {
|
||||
|
||||
/* 表名 */
|
||||
@Schema(name = "tableName", description = "表名")
|
||||
private String tableName;
|
||||
|
||||
/* 注释内容 */
|
||||
@Schema(name = "comment", description = "注释内容")
|
||||
private String comment;
|
||||
|
||||
/* 表目录 */
|
||||
@Schema(name = "tableCats", description = "表目录")
|
||||
private String tableCat;
|
||||
|
||||
/* 表类型(通常是"TABLE") */
|
||||
@Schema(name = "tableType", description = "表类型(通常是\"TABLE\")")
|
||||
private String tableType;
|
||||
|
||||
/* 类名 */
|
||||
@Schema(name = "className", description = "类名")
|
||||
private String className;
|
||||
|
||||
/* 列名称 */
|
||||
@Schema(name = "columns", description = "列名称")
|
||||
private List<ColumnMetaData> columns;
|
||||
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
package cn.bunny.service;
|
||||
|
||||
import cn.bunny.domain.entity.TableMetaData;
|
||||
|
||||
public interface SqlParserService {
|
||||
/**
|
||||
* 解析SQL内容
|
||||
*
|
||||
* @param sql Sql语句
|
||||
* @return 表信息内容
|
||||
*/
|
||||
TableMetaData tableInfo(String sql);
|
||||
}
|
|
@ -1,40 +1,14 @@
|
|||
package cn.bunny.service;
|
||||
|
||||
import cn.bunny.domain.entity.ColumnMetaData;
|
||||
import cn.bunny.domain.entity.DatabaseInfoMetaData;
|
||||
import cn.bunny.domain.entity.TableMetaData;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface TableService {
|
||||
|
||||
/**
|
||||
* 获取表属性
|
||||
*
|
||||
* @param tableName 表名称
|
||||
* @return 表属性
|
||||
*/
|
||||
TableMetaData tableMetaData(String tableName);
|
||||
|
||||
/**
|
||||
* 获取所有数据库
|
||||
*
|
||||
* @return 所有表信息
|
||||
*/
|
||||
List<TableMetaData> databaseTableList(String tableName);
|
||||
|
||||
/**
|
||||
* 获取列属性
|
||||
*
|
||||
* @param tableName 表名称
|
||||
* @return 当前表所有的列内容
|
||||
*/
|
||||
List<ColumnMetaData> tableColumnInfo(String tableName);
|
||||
|
||||
/**
|
||||
* 数据库所有的信息
|
||||
*
|
||||
* @return 当前连接的数据库信息属性
|
||||
*/
|
||||
DatabaseInfoMetaData databaseInfoMetaData();
|
||||
|
||||
}
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
package cn.bunny.service.impl;
|
||||
|
||||
import cn.bunny.core.factory.ConcreteSqlParserDatabaseInfo;
|
||||
import cn.bunny.domain.entity.TableMetaData;
|
||||
import cn.bunny.service.SqlParserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SqlParserServiceImpl implements SqlParserService {
|
||||
|
||||
private final ConcreteSqlParserDatabaseInfo sqlParserDatabaseInfo;
|
||||
|
||||
/**
|
||||
* 解析SQL内容
|
||||
*
|
||||
* @param sql Sql语句
|
||||
* @return 表信息内容
|
||||
*/
|
||||
@Override
|
||||
public TableMetaData tableInfo(String sql) {
|
||||
TableMetaData tableInfoVo = new TableMetaData();
|
||||
|
||||
TableMetaData tableMetaData = sqlParserDatabaseInfo.getTableMetadata(sql);
|
||||
BeanUtils.copyProperties(tableMetaData, tableInfoVo);
|
||||
return tableInfoVo;
|
||||
}
|
||||
}
|
|
@ -1,7 +1,6 @@
|
|||
package cn.bunny.service.impl;
|
||||
|
||||
import cn.bunny.core.factory.ConcreteDatabaseInfo;
|
||||
import cn.bunny.domain.entity.ColumnMetaData;
|
||||
import cn.bunny.core.factory.ConcreteDatabaseInfoService;
|
||||
import cn.bunny.domain.entity.DatabaseInfoMetaData;
|
||||
import cn.bunny.domain.entity.TableMetaData;
|
||||
import cn.bunny.service.TableService;
|
||||
|
@ -16,39 +15,7 @@ import java.util.stream.Collectors;
|
|||
@RequiredArgsConstructor
|
||||
public class TableServiceImpl implements TableService {
|
||||
|
||||
private final ConcreteDatabaseInfo databaseInfoCore;
|
||||
|
||||
/**
|
||||
* 获取表属性
|
||||
*
|
||||
* @param tableName 表名称
|
||||
* @return 表属性
|
||||
*/
|
||||
@Override
|
||||
public TableMetaData tableMetaData(String tableName) {
|
||||
return databaseInfoCore.getTableMetadata(tableName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取[当前/所有]数据库表
|
||||
*
|
||||
* @return 所有表信息
|
||||
*/
|
||||
@Override
|
||||
public List<TableMetaData> databaseTableList(String dbName) {
|
||||
return databaseInfoCore.databaseTableList(dbName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前表的列属性
|
||||
*
|
||||
* @param tableName 表名称
|
||||
* @return 当前表所有的列内容
|
||||
*/
|
||||
@Override
|
||||
public List<ColumnMetaData> tableColumnInfo(String tableName) {
|
||||
return databaseInfoCore.tableColumnInfo(tableName);
|
||||
}
|
||||
private final ConcreteDatabaseInfoService concreteDatabaseInfoService;
|
||||
|
||||
/**
|
||||
* 数据库所有的信息
|
||||
|
@ -58,7 +25,7 @@ public class TableServiceImpl implements TableService {
|
|||
@SneakyThrows
|
||||
@Override
|
||||
public DatabaseInfoMetaData databaseInfoMetaData() {
|
||||
List<TableMetaData> databaseTableList = databaseTableList(null);
|
||||
List<TableMetaData> databaseTableList = concreteDatabaseInfoService.databaseTableList(null);
|
||||
|
||||
// 将当前数据库表分组,以数据库名称为key
|
||||
List<TableMetaData> databaseList = databaseTableList.stream()
|
||||
|
@ -70,7 +37,7 @@ public class TableServiceImpl implements TableService {
|
|||
return tableInfoVo;
|
||||
}).toList();
|
||||
|
||||
DatabaseInfoMetaData databaseInfoMetaData = databaseInfoCore.databaseInfoMetaData();
|
||||
DatabaseInfoMetaData databaseInfoMetaData = concreteDatabaseInfoService.databaseInfoMetaData();
|
||||
databaseInfoMetaData.setDatabaseList(databaseList);
|
||||
|
||||
return databaseInfoMetaData;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package cn.bunny.service.impl.vms;
|
||||
|
||||
import cn.bunny.core.factory.ConcreteDatabaseInfo;
|
||||
import cn.bunny.core.factory.ConcreteSqlParserDatabaseInfo;
|
||||
import cn.bunny.core.factory.ConcreteDatabaseInfoService;
|
||||
import cn.bunny.core.factory.ConcreteSqlParserDatabaseInfoService;
|
||||
import cn.bunny.core.template.VmsArgumentDtoBaseVmsGeneratorTemplate;
|
||||
import cn.bunny.domain.dto.VmsArgumentDto;
|
||||
import cn.bunny.domain.entity.ColumnMetaData;
|
||||
|
@ -25,8 +25,8 @@ import java.util.stream.Collectors;
|
|||
@RequiredArgsConstructor
|
||||
public class VmsCodeGeneratorService {
|
||||
|
||||
private final ConcreteDatabaseInfo databaseInfoCore;
|
||||
private final ConcreteSqlParserDatabaseInfo sqlParserDatabaseInfo;
|
||||
private final ConcreteDatabaseInfoService databaseInfoCore;
|
||||
private final ConcreteSqlParserDatabaseInfoService sqlParserDatabaseInfo;
|
||||
|
||||
/**
|
||||
* 根据DTO生成代码模板
|
||||
|
|
|
@ -14,7 +14,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
@SpringBootTest
|
||||
class ConcreteDatabaseInfoCoreTest {
|
||||
class ConcreteDatabaseInfoServiceCoreTest {
|
||||
|
||||
String tableName = "sys_i18n";
|
||||
|
Loading…
Reference in New Issue