SQL 生成器,避免重复编码工作 Sql-Generate

Sql-Generate

项目介绍

sql-generate 是一个基于java语言开发的项目,它是一个 SQL 生成类的项目,用于某些文件资源映射成对应的 SQL,提高开发效率

背景

在工作当中,会遇到上线前需要初始化数据或上线后线上数据不正确、数据需要清洗等,对于复杂的场景需要写脚本来支持,对于简单的场景往往是写 sql 人工执行,数据的来源往往是某个文件,通过文件解析成对应的 sql,时间一长,每次发生这种事情就会产生不必要的工作量,所以本项目把解析、生产对应的 sql,抽象成对应工具库,提高开发效率

Features

  • 支持excel、csv、txt(普通文件) 多种文件解析格式
  • 支持文件解析配置、内容过滤、内容转换
  • 支持数据格式化配置
  • 支持console、file等多种视图展示
  • 解析器、视图展示支持可扩展

架构

image-1.png

集成方式

Maven:

1
2
3
4
5
xml复制代码<dependency>
<groupId>com.github.rrsunhome</groupId>
<artifactId>excelsql-generate</artifactId>
<version>2.0.2</version>
</dependency>

Gradle:

1
arduino复制代码implementation 'com.github.rrsunhome:excelsql-generate:2.0.2'

快速开始

加载普通文件资源

1
2
3
4
5
6
7
8
9
10
11
12
java复制代码    Resource resource = new ClassPathResource("order.txt");

TextParserConfig parserConfig = new TextParserConfig("\t");
parserConfig.setRowRange(0,20);
SqlFormatConfig sqlFormatConfig = new SqlFormatConfig("insert into table(a,b,c) values({0},{1},{2});")
.setString(0, 0)
.setString(1, 1)
.setInt(2, 2);
SqlGenerator csvSqlGenerator = new DefaultSqlGenerator(resource,
parserConfig, sqlFormatConfig);
ResultSet resultSet = csvSqlGenerator.execute();
resultSet.outputView();

加载 Excel 资源

1
2
3
4
5
6
7
8
9
10
11
12
java复制代码      Resource resource = new ClassPathResource("order-v1.xlsx");

ExcelParserConfig parserConfig = new ExcelParserConfig();
String sql = "insert into table(a,b,c) values({0},{1},{2});";
SqlFormatConfig sqlFormatConfig = new SqlFormatConfig(sql)
.setString(0, 1)
.setString(1, 0)
.setInt(2, 2);

SqlGenerator csvSqlGenerator = new DefaultSqlGenerator(resource, parserConfig, sqlFormatConfig);
ResultSet resultSet = csvSqlGenerator.execute();
resultSet.outputView();

加载 Csv 资源

1
2
3
4
5
6
7
8
9
10
java复制代码        Resource resource = new ClassPathResource("order.csv");
ExcelParserConfig parserConfig = new ExcelParserConfig();
parserConfig.setSheetIndex(0);
SqlFormatConfig sqlFormatConfig = new SqlFormatConfig("insert into table(a,b,c) values({0},{1},{2});")
.setString(0, 1)
.setString(1, 0)
.setInt(2, 2);
SqlGenerator csvSqlGenerator = new DefaultSqlGenerator(resource, parserConfig, sqlFormatConfig);
ResultSet resultSet = csvSqlGenerator.execute();
resultSet.outputView();

属性配置

基本解析配置

BaseParserConfig

  • titleRowIndex 默认值: 0 标题行下标
  • rowRange 默认值: 全部数据 行数据范围
  • cellName 默认值: 空 列标题
  • cellNum 默认值: 空 列下标
  • CellFilter 默认值: TrueCellFilter 当前列是否过滤,又一列不符合当前行则跳过
  • CellConverter 默认值: ObjectToStringCellConverter 列内容转换器

文本解析配置

TextParserConfig

  • delimiter 默认值: \t 数据分隔符

Excel 解析配置

ExcelParserConfig

  • sheetIndex 默认值: 0 sheet 下标
  • sheetName 默认值: 空 sheet 名称

Csv 解析配置

CsvParserConfig

  • 无特殊配置

配置演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
java复制代码        CsvParserConfig parserConfig = new CsvParserConfig();
parserConfig.setTitleRowIndex(0);
parserConfig.setRowRange(1, 30);
parserConfig.addCellMapping(CellMapping.builder()
.cellNum(1)
.cellFilter(cellValue -> true)
.cellConverter(Object::toString)
.build());
parserConfig.addCellMapping(CellMapping.builder()
.cellNum(2)
.cellFilter("21"::equals)
.cellConverter(Object::toString)
.build());
parserConfig.addCellMapping(CellMapping.builder()
.cellNum(0)
.build());

SQL 格式化配置

SqlFormatConfig

  • sql 默认值: 空 sql 模版
  • parameterIndexMapping 默认值:空 参数下标与文件 cell 下标映射
  • Formatter 默认值: com.github.rrsunhome.excelsql.format.MessageFormatter sql 格式化
    • com.github.rrsunhome.excelsql.format.MessageFormatter
    • com.github.rrsunhome.excelsql.format.StringFormatter

配置演示

1
2
3
4
java复制代码        SqlFormatConfig sqlFormatConfig = new SqlFormatConfig("insert into table(a,b,c) values({0},{1},{2});", new MessageFormatter())
.setString(0, 1)
.setString(1, 0)
.setInt(2, 2);

项目地址

github.com/rrsunhome/e…

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%