背景
数据组在zf内网环境推送了很多表、数据,不能直接连数据库进行传统的代码生成,而业务又没啥逻辑,工作耗时主要在建实体类,动不动100多个字段,所以有了下面的代码,还做了swagger文档配置,复制之后即可使用。
废话不多说,直接上代码
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
import java.util.HashMap;
/**
* @author: DaBaiBuHuiXiao
* @Date: 2023/12/19 10:02
* 读取excel生成java实体类
*/
public class DomainWork {
public static void main(String[] args) throws IOException {
// excel访问路径
// 所传入文件格式为:第一列字段名,第二列字段中文注释(用于swagger文档)
String excelFilePath = "C:\\Users\\78596\\Desktop\\beanTest.xlsx";
// 开流
FileInputStream fis = new FileInputStream(excelFilePath);
Workbook workbook = new XSSFWorkbook(fis);
int headerRowNum = workbook.getSheetAt(0).getLastRowNum();
HashMap<String, String> hashMap = new HashMap<>();
for (int i = 0; i <= headerRowNum; i++) {
// 读取第一个sheet页
Row row = workbook.getSheetAt(0).getRow(i);
// 读取第一列为 实体字段名,第二列为swagger注释名
hashMap.put(row.getCell(0).getStringCellValue(),row.getCell(1).getStringCellValue());
}
workbook.close();
fis.close();
// 生成java实体类
final String beanName = "Bean";
// 代码生成地址
File file = new File("D:\\"+ beanName +".java");
try (
FileWriter fw = new FileWriter(file);
PrintWriter pw = new PrintWriter(fw)) {
pw.println("import io.swagger.annotations.ApiModelProperty;");
pw.println("import lombok.Getter;");
pw.println("import lombok.Setter;");
pw.println("import lombok.NoArgsConstructor;");
pw.println();
pw.println("@Getter");
pw.println("@Setter");
pw.println("@NoArgsConstructor");
pw.println("public class " + beanName +"{");
for (String key:hashMap.keySet()
) {
pw.println();
pw.println(" @ApiModelProperty("+"\""+hashMap.get(key)+"\""+")");
pw.println(" private String "+key+";");
}
pw.println();
pw.println("}");
}catch (Exception e){
e.printStackTrace();
}
}
}
Excel样例:
不需要表头啥的,就只有需要用到的两列。
成功生成:
写法可能比较粗糙,客户着急要,有不足之处敬请谅解~
有问题可留言,觉得好用麻烦三连,谢谢兄弟萌,(*  ̄3)(ε ̄ *)
补充:
- 有可能部分字段是国产数据库导出的,所以有大写字段,然而大写开头的字段名是会有问题的,所以建议添加这个:key.toLowerCase();转换一下~