Skip to content

Commit f0e7101

Browse files
committed
feat: 2.06 Bean to table | Bean 对应表
1 parent 6666d3b commit f0e7101

File tree

9 files changed

+125
-17
lines changed

9 files changed

+125
-17
lines changed

Diff for: CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
## [1.0.0]
66

7+
- 2.06 Bean to table
78
- 2.05 ignore id in ignore.sql-list.txt
89
- 2.04 MyBatis *.xml SQL inspection
910
- 2.02 ★ Column Relationships PlantUML
@@ -13,6 +14,7 @@
1314

1415
# 中文更新日志
1516

17+
- 2.06 Bean 对应表
1618
- 2.05 忽略 ignore.sql-list.txt 中的 id
1719
- 2.04 MyBatis *.xml SQL 实时检查
1820
- 2.03 增加 sql-list.err.md 文件

Diff for: gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pluginGroup = com.github.linwancen.plugin.sql
44
pluginName = sql-list
55
pluginRepositoryUrl = https://github.com/LinWanCen/sql-list
66
# SemVer format -> https://semver.org
7-
pluginVersion = 2.05
7+
pluginVersion = 2.06
88

99
# Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
1010
pluginSinceBuild = 201

Diff for: src/main/java/io/github/linwancen/sql/DiffGit.java

+3-6
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,23 @@
33
import io.github.linwancen.sql.bean.GitRootInfo;
44
import io.github.linwancen.sql.bean.SqlInfo;
55
import io.github.linwancen.sql.parser.AllParser;
6-
import io.github.linwancen.sql.parser.GitParser;
76
import io.github.linwancen.util.git.GitUtils;
8-
import io.github.linwancen.util.java.TimeUtils;
9-
import org.slf4j.Logger;
10-
import org.slf4j.LoggerFactory;
117

128
import java.io.File;
139
import java.util.Arrays;
1410
import java.util.List;
1511
import java.util.function.Consumer;
12+
import java.util.regex.Pattern;
1613
import java.util.stream.Collectors;
1714

1815
/**
1916
*
2017
*/
2118
public class DiffGit {
22-
private static final Logger LOG = LoggerFactory.getLogger(DiffGit.class);
19+
private static final Pattern SPLIT_PATTERN = Pattern.compile("\\.\\.");
2320

2421
public static void gitBetween(String[] args, Consumer<List<SqlInfo>> fun) {
25-
String[] split = args[0].split("\\.\\.");
22+
String[] split = SPLIT_PATTERN.split(args[0]);
2623
if (split.length != 2) {
2724
return;
2825
}

Diff for: src/main/java/io/github/linwancen/sql/bean/Dto.java

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package io.github.linwancen.sql.bean;
2+
3+
import com.alibaba.excel.annotation.write.style.ColumnWidth;
4+
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
5+
import com.alibaba.excel.annotation.write.style.HeadStyle;
6+
import com.alibaba.excel.enums.BooleanEnum;
7+
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
8+
9+
@SuppressWarnings("unused")
10+
@HeadStyle(wrapped = BooleanEnum.FALSE, horizontalAlignment = HorizontalAlignmentEnum.LEFT)
11+
@HeadFontStyle(fontHeightInPoints = 11, bold = BooleanEnum.FALSE, fontName = "宋体")
12+
public class Dto {
13+
public Dto(String className, String tableName) {
14+
this.className = className;
15+
this.tableName = tableName;
16+
}
17+
18+
@ColumnWidth(50)
19+
private String className;
20+
@ColumnWidth(50)
21+
private String tableName;
22+
23+
public String getClassName() {
24+
return className;
25+
}
26+
27+
public void setClassName(String className) {
28+
this.className = className;
29+
}
30+
31+
public String getTableName() {
32+
return tableName;
33+
}
34+
35+
public void setTableName(String tableName) {
36+
this.tableName = tableName;
37+
}
38+
}

Diff for: src/main/java/io/github/linwancen/sql/bean/SqlInfo.java

+27
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.Map;
1717
import java.util.Set;
1818
import java.util.TreeMap;
19+
import java.util.regex.Pattern;
1920
import java.util.stream.Collectors;
2021

2122
@SuppressWarnings("unused")
@@ -29,6 +30,7 @@ public class SqlInfo {
2930
private String type;
3031
private String parameterType;
3132
private String resultMap;
33+
private String resultType;
3234
@ColumnWidth(40)
3335
private String sql;
3436
/** TableName, TableExcelLine */
@@ -113,6 +115,31 @@ public void setResultMap(String resultMap) {
113115
this.resultMap = resultMap;
114116
}
115117

118+
public String getResultType() {
119+
return resultType;
120+
}
121+
122+
public void setResultType(String resultType) {
123+
this.resultType = resultType;
124+
}
125+
126+
Pattern BASE_PATTERN = Pattern.compile("^java\\.|^(int|long|short|double|float|boolean|char|byte" +
127+
"|String|map|integer|Integer|Long|Short|Double|Float|Boolean|Char|Byte)$");
128+
129+
public String getResultClass() {
130+
if (resultType == null || BASE_PATTERN.matcher(resultType).find()) {
131+
return null;
132+
}
133+
return resultType;
134+
}
135+
136+
public String getParameterClass() {
137+
if (parameterType == null || BASE_PATTERN.matcher(parameterType).find()) {
138+
return null;
139+
}
140+
return parameterType;
141+
}
142+
116143
public String getSql() {
117144
return sql;
118145
}

Diff for: src/main/java/io/github/linwancen/sql/excel/SqlInfoWriter.java

+21-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.alibaba.excel.ExcelWriter;
44
import com.alibaba.excel.write.metadata.WriteSheet;
5+
import io.github.linwancen.sql.bean.Dto;
56
import io.github.linwancen.sql.bean.Rel;
67
import io.github.linwancen.sql.bean.SqlInfo;
78
import io.github.linwancen.sql.bean.TableColumn;
@@ -18,7 +19,9 @@
1819
import java.util.Collections;
1920
import java.util.Comparator;
2021
import java.util.HashSet;
22+
import java.util.LinkedHashMap;
2123
import java.util.List;
24+
import java.util.Map;
2225
import java.util.Set;
2326
import java.util.TreeMap;
2427

@@ -32,14 +35,17 @@ public class SqlInfoWriter {
3235
private final WriteSheet table;
3336
private final WriteSheet column;
3437
private final WriteSheet rel;
38+
private final WriteSheet dto;
3539
private final Set<List<String>> columnRel = new HashSet<>();
40+
private final Map<String, String> dtoMap = new LinkedHashMap<>();
3641

3742
public SqlInfoWriter(ExcelWriter excelWriter) {
3843
this.excelWriter = excelWriter;
3944
sql = ExcelUtils.sheet(this.excelWriter, "sql", SqlInfo.class);
4045
table = ExcelUtils.sheet(excelWriter, "table", TableColumn.class);
4146
column = ExcelUtils.sheet(excelWriter, "column", TableColumn.class);
4247
rel = ExcelUtils.sheet(excelWriter, "rel", Rel.class);
48+
dto = ExcelUtils.sheet(excelWriter, "dto", Dto.class);
4349
}
4450

4551
public void write(List<SqlInfo> sqlInfo) {
@@ -52,12 +58,23 @@ public void write(List<SqlInfo> sqlInfo) {
5258
}
5359
info.setSql(sqlStr);
5460

61+
String oneTableName = null;
62+
if (info.getTableMap().size() == 1) {
63+
oneTableName = info.getTableMap().keySet().iterator().next();
64+
String parameterClass = info.getParameterClass();
65+
if (parameterClass != null) {
66+
dtoMap.putIfAbsent(parameterClass, oneTableName);
67+
}
68+
String resultClass = info.getResultClass();
69+
if (resultClass != null) {
70+
dtoMap.put(resultClass, oneTableName);
71+
}
72+
}
5573
for (TreeMap<String, TableColumn> map : info.getColumnList()) {
5674
for (TableColumn v : map.values()) {
5775
// column table null and one table use it
58-
if (v.getTable() == null && info.getTableMap().size() == 1) {
59-
String tableName = info.getTableMap().keySet().iterator().next();
60-
v.setTable(tableName);
76+
if (v.getTable() == null && oneTableName != null) {
77+
v.setTable(oneTableName);
6178
}
6279
excelWriter.write(Collections.singleton(v), column);
6380

@@ -78,6 +95,7 @@ public void write(List<SqlInfo> sqlInfo) {
7895

7996
appendErr(info, err);
8097
}
98+
dtoMap.forEach((clazz, table) -> excelWriter.write(Collections.singleton(new Dto(clazz, table)), dto));
8199
excelWriter.write(sqlInfo, sql);
82100

83101
File file = excelWriter.writeContext().writeWorkbookHolder().getFile();

Diff for: src/main/java/io/github/linwancen/sql/parser/jsqlparser/AddUtils.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,11 @@ private static String tableName(SqlInfo sqlInfo, Column column) {
8686
return null;
8787
} else {
8888
String aliasName = table.getName();
89-
String mapName = aliasName == null ? null : sqlInfo.getAliasMap().get(aliasName);
90-
return mapName == null ? aliasName : mapName;
89+
if (aliasName == null) {
90+
return null;
91+
}
92+
String mapName = sqlInfo.getAliasMap().get(aliasName);
93+
return mapName != null ? mapName : aliasName.replace("`", "");
9194
}
9295
}
9396
}

Diff for: src/main/java/io/github/linwancen/sql/parser/mybatis/file/XmlFileParser.java

+25-4
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ public class XmlFileParser {
4646
public final MapperBuilderAssistant assistant;
4747
public final XNode mapper;
4848
public final String namespace;
49-
public final Map<String , LineNumberElement> lineMap = new HashMap<>();
49+
public final Map<String, LineNumberElement> lineMap = new HashMap<>();
50+
public final Map<String, String> resultMapMap = new HashMap<>();
51+
public final Map<String, String> typeAliasMap = new HashMap<>();
5052

5153
public static XmlFileParser build(Configuration configuration, File file, GitRootInfo gitRootInfo) {
5254
try (FileInputStream fis = new FileInputStream(file)) {
@@ -100,8 +102,16 @@ public XmlFileParser(InputStream fis, Configuration configuration, File file, Gi
100102
Element rootElement = document.getRootElement();
101103
List<Element> children = rootElement.getChildren();
102104
for (Element child : children) {
103-
String type = child.getName();
104-
if (!SQL_TYPE_PATTERN.matcher(type).find()) {
105+
String name = child.getName();
106+
switch (name) {
107+
case "resultMap":
108+
resultMapMap.put(child.getAttributeValue("id"), child.getAttributeValue("type"));
109+
continue;
110+
case "typeAlias":
111+
typeAliasMap.put(child.getAttributeValue("alias"), child.getAttributeValue("type"));
112+
continue;
113+
}
114+
if (!SQL_TYPE_PATTERN.matcher(name).find()) {
105115
continue;
106116
}
107117
String id = child.getAttributeValue("id");
@@ -169,7 +179,18 @@ public void parserSql(Function<SqlInfo, Boolean> fun) {
169179
sqlInfo.setNamespace(namespace);
170180
sqlInfo.setType(xmlSQL.getName());
171181
sqlInfo.setParameterType(xmlSQL.getStringAttribute("parameterType"));
172-
sqlInfo.setResultMap(xmlSQL.getStringAttribute("resultMap"));
182+
183+
String resultMap = xmlSQL.getStringAttribute("resultMap");
184+
if (resultMap != null) {
185+
sqlInfo.setResultMap(resultMap);
186+
sqlInfo.setResultType(resultMapMap.get(resultMap));
187+
} else {
188+
sqlInfo.setResultType(xmlSQL.getStringAttribute("resultType"));
189+
}
190+
String type = typeAliasMap.get(sqlInfo.getResultType());
191+
if (type != null) {
192+
sqlInfo.setResultType(type);
193+
}
173194

174195
XMLIncludeTransformer transformer = new XMLIncludeTransformer(configuration, assistant);
175196
Node node = xmlSQL.getNode();

Diff for: src/main/java/io/github/linwancen/util/java/JFileUtils.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import javax.swing.*;
44
import java.io.File;
55
import java.util.ArrayList;
6+
import java.util.regex.Pattern;
67

78
public class JFileUtils {
9+
private static final Pattern SPLIT_PATTERN = Pattern.compile("\n");
810

911
private JFileUtils() {}
1012

@@ -14,7 +16,7 @@ public static File[] chooser() {
1416
jFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
1517
File lastSelectFile = new File("lastSelectFile.txt");
1618
if (lastSelectFile.exists()) {
17-
String[] split = FileUtils.read(lastSelectFile).split("\n");
19+
String[] split = SPLIT_PATTERN.split(FileUtils.read(lastSelectFile));
1820
if (split.length >= 2) {
1921
jFileChooser.setCurrentDirectory(new File(split[0]));
2022
ArrayList<File> files = new ArrayList<>();

0 commit comments

Comments
 (0)