当前位置: 首页 > news >正文

mysql表逆向实体类

mysql表逆向实体类

目标框架springboot,mybatisplus

package com.wql.repackage;import java.io.FileWriter;
import java.io.IOException;
import java.sql.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;public class EntityClassGenerator {// todo 需要配置private static final String HOST = "127.0.0.1";private static final int PORT = 3306;// todo 需要配置private static final String DATABASE = "数据库名称";// todo 需要配置private static final String USER = "用户名";// todo 需要配置private static final String PASSWORD = "密码";// todo 需要配置private static final String OUTPUTDIR = "C:\\Users\\Admin\\Desktop";private static final List<String> TABLE_NAMES = new ArrayList<>();private static final List<String> CLASS_CONTENTS = new ArrayList<>();private static final String URL = "jdbc:mysql://" + HOST + ":" + PORT + "/" + DATABASE;// todo 需要配置// 是否增加mybatisplus注解private static final Boolean IS_ADD_MYBATISPLUS_ANNOTATION = true;private static final List<String> INSERT_FIELD_FILL_COLUMN_NAMES = new ArrayList<>();private static final List<String> INSERT_UPDATE_FIELD_FILL_COLUMN_NAMES = new ArrayList<>();// todo 需要配置// 是否逻辑删除private static final Boolean IS_LOGIC_DELETE = true;// todo 需要配置// 逻辑删除字段private static final String LOGIC_DELETE_COLUMN_NAME = "delete_flag";static{// 表TABLE_NAMES.add("i18n_module");TABLE_NAMES.add("i18n_keyword");// 表统一注释CLASS_CONTENTS.add("@author: 作者名称");CLASS_CONTENTS.add("@date: " + LocalDateTime.now());// 需要insert注解的字段INSERT_FIELD_FILL_COLUMN_NAMES.add("create_time");INSERT_FIELD_FILL_COLUMN_NAMES.add("create_user");// 需要update注解的字段INSERT_UPDATE_FIELD_FILL_COLUMN_NAMES.add("update_time");INSERT_UPDATE_FIELD_FILL_COLUMN_NAMES.add("update_user");}public static void main(String[] args) {try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD)) {try {for (String tableName : TABLE_NAMES) {generateEntityForTable(conn,CLASS_CONTENTS,tableName, OUTPUTDIR);}} catch (Exception e) {throw new RuntimeException(e);}// 打印结束System.out.println("Entity class generated successfully.");} catch (Exception e) {e.printStackTrace();}}private static void generateEntityForTable(Connection conn, List<String> classContents,String tableName, String outputDir) throws SQLException, IOException {System.out.println("=========================>>表"+tableName+"=========");String className = toCamelCaseTableName(tableName);DatabaseMetaData metaData = conn.getMetaData();StringBuilder sb = new StringBuilder();sb.append("package com.example;\n\n");if (IS_ADD_MYBATISPLUS_ANNOTATION) {sb.append("import com.baomidou.mybatisplus.annotation.*;\n");}sb.append("import com.fasterxml.jackson.annotation.JsonFormat;\n");sb.append("import lombok.Data;\n\n");// 获取表的commentString classComment = generateClassComment(classContents);sb.append(classComment);sb.append("@Data\n");// 判断是否需要添加mybatisplus注解if(IS_ADD_MYBATISPLUS_ANNOTATION){sb.append("@TableName(\""+tableName+"\")\n");}sb.append("public class ").append(className).append(" {\n");String primaryKeyColumnName = "";ResultSet primaryKeys = metaData.getPrimaryKeys(DATABASE, null, tableName);if (primaryKeys.next()) {primaryKeyColumnName = primaryKeys.getString("COLUMN_NAME");}ResultSet columns = metaData.getColumns(null, null, tableName, null);while (columns.next()) {String columnName = columns.getString("COLUMN_NAME");String columnType = columns.getString("TYPE_NAME");String javaColumnName = toCamelCaseColumnName(columnName);System.out.println(columnName+"->DB字段类型:"+columnType+"");String comment = columns.getString("REMARKS");sb.append("    /** ").append(comment).append(" */\n");// 判断是否添加mybatisplus注解,并且判断是否主键,如果是主键,就添加// @TableId(type = IdType.ASSIGN_ID)// @JsonFormat(shape = JsonFormat.Shape.STRING)if(IS_ADD_MYBATISPLUS_ANNOTATION && primaryKeyColumnName.equalsIgnoreCase(columnName)){sb.append("    @TableId(type = IdType.ASSIGN_ID)\n");sb.append("    @JsonFormat(shape = JsonFormat.Shape.STRING)\n");}// 判断是否需要添加insert注解,并且判断是否是insert字段if(IS_ADD_MYBATISPLUS_ANNOTATION && INSERT_FIELD_FILL_COLUMN_NAMES.contains(columnName)){sb.append("    @TableField(fill = FieldFill.INSERT)\n");}// 判断是否需要添加update注解,并且判断是否是update字段if(IS_ADD_MYBATISPLUS_ANNOTATION && INSERT_UPDATE_FIELD_FILL_COLUMN_NAMES.contains(columnName)){sb.append("    @TableField(fill = FieldFill.INSERT_UPDATE)\n");}// 逻辑删除if(IS_ADD_MYBATISPLUS_ANNOTATION && IS_LOGIC_DELETE && LOGIC_DELETE_COLUMN_NAME.equalsIgnoreCase(columnName)){sb.append("    @TableLogic(value = \"0\", delval = \"1\")\n");}sb.append("    private ").append(mapSqlTypeToJava(columnType)).append(" ").append(javaColumnName).append(";\n\n");}sb.append("}\n");writeToFile(outputDir, className + ".java", sb.toString());System.out.println("=========================<<类"+className+"完毕!=====");}// 生成类注释private static String generateClassComment(List<String> classContents) {StringBuilder sb = new StringBuilder();sb.append("/** \n * \n");if(null != classContents){for (String classContent : classContents) {sb.append(" * ").append(classContent).append("\n");}}sb.append(" */\n");return sb.toString();}private static String mapSqlTypeToJava(String sqlType) {switch (sqlType.toUpperCase()) {case "DATE":return "LocalDate";case "DATETIME":case "TIMESTAMP":return "LocalDateTime";case "INT":case "BIT":case "TINYINT":return "Integer";case "BIGINT":case "BIGINT UNSIGNED":return "Long";case "VARCHAR":case "CHAR":case "TEXT":return "String";// todo 其他未处理的类型 在此处添加default:return "Object";}}private static String toCamelCaseTableName(String s) {if (s == null || s.isEmpty()) {return s;}String[] parts = s.split("_");StringBuilder camelCase = new StringBuilder();for (String part : parts) {if (!part.isEmpty()) {camelCase.append(part.substring(0, 1).toUpperCase()).append(part.substring(1).toLowerCase());}}return camelCase.append("DO").toString();}private static String toCamelCaseColumnName(String s) {if (s == null || s.isEmpty()) {return s;}String[] parts = s.split("_");StringBuilder camelCase = new StringBuilder();for (String part : parts) {if (!part.isEmpty()) {if (camelCase.length() == 0) {camelCase.append(part.toLowerCase());} else {camelCase.append(part.substring(0, 1).toUpperCase()).append(part.substring(1).toLowerCase());}}}return camelCase.toString();}private static void writeToFile(String dir, String fileName, String content) throws IOException {FileWriter writer = new FileWriter(dir + "/" + fileName);writer.write(content);writer.close();}
}


http://www.mrgr.cn/news/31203.html

相关文章:

  • DAY110代码审计-PHP框架开发篇ThinkPHP版本缺陷不安全写法路由访问利用链
  • LeetCode题练习与总结:判断子序列--392
  • 基于Python的药房管理系统
  • 计算机的错误计算(一百五十一)
  • MySQL多系统安装配置教程(Windows、Ubuntu、Centos)
  • 2024中国游戏出海情况
  • 大气网格化精细化监管监测系统
  • API 接口接入前:遵循标准流程与规范的注意事项
  • 云计算课程作业1
  • EC Shop安装指南 [ Apache PHP Mysql ]
  • CSP-J2024全真模拟题 阅读程序题3+程序填空题
  • OJ 旋转图像
  • postgresql gcc编译选项解释
  • Java集成gdal 处理解析tiff和shp数据
  • 大模型的实践应用30-大模型训练和推理中分布式核心技术的应用
  • iftop流量监控工具
  • 鸿蒙OpenHarmony【轻量系统内核通信机制(消息队列)】子系统开发
  • 红日药业携手实在智能,构建RPA数字员工平台满足业务一体化需求 | 实在RPA案例
  • cmake--set_target_properties
  • 20240921 每日AI必读资讯
  • 基于Java的房地产在线营销管理系统研究与实现
  • 浅谈死锁以及判断死锁的方法
  • QEMU 运行Win11 成功的例子
  • fastadmin后台自定义按钮,并且刷新页面
  • 线程池的类型
  • 【测试】博客系统测试报告