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