🚧 优化后端代码

This commit is contained in:
Bunny 2025-07-01 15:05:27 +08:00
parent 132c03a4ef
commit 5ef135de32
11 changed files with 40 additions and 136 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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生成代码模板

View File

@ -14,7 +14,7 @@ import java.util.ArrayList;
import java.util.List;
@SpringBootTest
class ConcreteDatabaseInfoCoreTest {
class ConcreteDatabaseInfoServiceCoreTest {
String tableName = "sys_i18n";