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

网站管理内容网站建设管理相关规定

网站管理内容,网站建设管理相关规定,备案号,做美图 网站有哪些在这篇博客中,我分享了如何通过 Java 和 JDBC 自动生成数据库实体类的过程。通常,手动编写实体类代码既繁琐又容易出错,尤其是在数据库表结构发生变化时,手动更新代码的工作量非常大。为了提高开发效率,我利用 JDBC 连…

在这篇博客中,我分享了如何通过 Java 和 JDBC 自动生成数据库实体类的过程。通常,手动编写实体类代码既繁琐又容易出错,尤其是在数据库表结构发生变化时,手动更新代码的工作量非常大。为了提高开发效率,我利用 JDBC 连接到数据库,通过 DatabaseMetaData 获取表的元数据,自动化获取表的字段信息(如列名、列类型和列注释)。接着,将数据库中的字段名转换为 Java 的驼峰命名法,并根据字段的类型生成合适的 Java 类型(如 String, Long, Integer 等)。此外,我还将数据库字段的注释转化为 Java 类的 Javadoc 注释,使得生成的实体类更加易于理解和维护。生成的实体类会被保存到指定的包路径中,确保项目结构的整洁。通过这种方式,我们能够轻松地为数据库中的每一张表生成相应的实体类,避免了手动编写实体类的繁琐过程,提高了开发效率,也保证了代码的一致性。文章中还提供了完整的代码示例,方便大家理解并应用到自己的项目中。

public class EntityGenerator {

    public static void main(String[] args) {String dbUrl = "jdbc:mysql://:/?useUnicode=true&characterEncoding=utf-8";String dbUsername = "";String dbPassword = "";
//        List<String> tableNames = Arrays.asList("kdb_store_profile_info", "kdb_task_factor");  // 要生成实体类的表名List<String> tableNames = Arrays.asList();  // 为空生成该数据库下所有表结构String packageName = "com.***.base";  // 生成实体类的包名generateEntityClasses(dbUrl, dbUsername, dbPassword, tableNames, packageName);}public static void generateEntityClasses(String dbUrl, String dbUsername, String dbPassword, List<String> tableNames, String packageName) {try (Connection connection = DriverManager.getConnection(dbUrl, dbUsername, dbPassword)) {// 获取数据库元数据DatabaseMetaData metaData = connection.getMetaData();// 如果tableNames为空,获取数据库 "ymkdb" 中的所有表if (tableNames == null || tableNames.isEmpty()) {tableNames = getTableNamesFromDatabase(metaData, "ymkdb");}// 生成每个表的实体类int generatedTableCount = 0;for (String tableName : tableNames) {generateEntityClass(metaData, tableName, packageName);generatedTableCount++;}// 打印日志,显示总共生成了多少张表System.out.println("总共生成了 " + generatedTableCount + " 张表的实体类。");} catch (SQLException | IOException e) {e.printStackTrace();}
}// 获取 "ymkdb" 数据库中的所有表名
private static List<String> getTableNamesFromDatabase(DatabaseMetaData metaData, String databaseName) throws SQLException {List<String> tableNames = new ArrayList<>();ResultSet resultSet = metaData.getTables(databaseName, null, null, new String[] { "TABLE" });while (resultSet.next()) {String tableName = resultSet.getString("TABLE_NAME");tableNames.add(tableName);}return tableNames;
}// 根据表名生成实体类
public static void generateEntityClass(DatabaseMetaData metaData, String tableName, String packageName) throws SQLException, IOException {ResultSet columns = metaData.getColumns(null, null, tableName, null);// 获取表的注释String tableComment = getTableComment(metaData, tableName);StringBuilder classContent = new StringBuilder();//        // 类名转换为首字母大写String className = toClassName(tableName);// 包名和类名classContent.append("package ").append(packageName).append(";\n\n");// 导入语句classContent.append("import lombok.Data;\n");classContent.append("import java.io.Serializable;\n");classContent.append("import java.util.Date;\n\n");// 类定义前添加表名的注释classContent.append("/**\n").append(" * ").append(tableComment != null ? tableComment : tableName).append("\n").append(" */\n");// 类注解和定义classContent.append("@Data\n");classContent.append("public class ").append(className).append(" implements Serializable {\n");// 读取表字段信息while (columns.next()) {String columnName = columns.getString("COLUMN_NAME");String columnType = columns.getString("TYPE_NAME");String columnComment = columns.getString("REMARKS");  // 获取字段的注释// 将数据库字段名转换为驼峰式命名String fieldName = toCamelCase(columnName);String fieldType = getJavaType(columnType);// 添加字段声明classContent.append("\n    /**\n").append("     * ").append(columnComment != null ? columnComment : columnName).append("\n").append("     */\n").append("    private ").append(fieldType).append(" ").append(fieldName).append(";\n");}// 结束类定义classContent.append("\n}");// 保存文件String filePath = "src/main/java/" + packageName.replace('.', '/') + "/" + className + ".java";File file = new File(filePath);file.getParentFile().mkdirs();try (FileWriter writer = new FileWriter(file)) {writer.write(classContent.toString());System.out.println("Java 文件生成成功: " + filePath);}
}// 获取表的注释
private static String getTableComment(DatabaseMetaData metaData, String tableName) throws SQLException {ResultSet resultSet = metaData.getTables(null, null, tableName, new String[] { "TABLE" });if (resultSet.next()) {return resultSet.getString("REMARKS");}return null;  // 默认返回null
}// 将数据库字段名转换为驼峰命名
private static String toCamelCase(String columnName) {StringBuilder camelCaseString = new StringBuilder();String[] parts = columnName.split("_");for (String part : parts) {if (camelCaseString.length() == 0) {camelCaseString.append(part.toLowerCase());} else {camelCaseString.append(part.substring(0, 1).toUpperCase()).append(part.substring(1).toLowerCase());}}return camelCaseString.toString();
}// 将表名转换为类名
private static String toClassName(String tableName) {StringBuilder className = new StringBuilder();String[] parts = tableName.split("_");for (String part : parts) {className.append(part.substring(0, 1).toUpperCase()).append(part.substring(1).toLowerCase());}return className.toString();
}// 根据数据库字段类型映射到 Java 类型
private static String getJavaType(String sqlType) {switch (sqlType) {case "BIGINT":return "Long";case "VARCHAR":return "String";case "TINYINT":return "Integer";case "INT":return "Integer";case "DATETIME":return "Date";default:return "String";  // 默认返回 String 类型}
}

}

http://www.yayakq.cn/news/710641/

相关文章:

  • 厦门建设局网站首页wordpress文章标题设为标签
  • 高端网站定制费用是多少驻马店行业网站建设源码
  • 购物网站模板站wordpress模板 sky
  • 跨境电商怎么做广告seo建站系统
  • 服务器网站别名设置企业微信营销软件
  • 做服装外单的网站有哪些内容制作公司资料网页
  • 网站首页的psd怎么做什么是网站的访问流量
  • 网站建设昆明dnf做汉堡怎么玩间网站
  • 什么网站能让小孩做算术题wordpress theme forest
  • 做网站全部乱码怎么办情感网站seo
  • 网站模板切换如何创建网站赚钱
  • 服装网站建设企业需求调查济南高新区 网站建设公司
  • 山西做网站怎么做长春什么时候解封
  • 自己做网站 发布视频建设网站开发公司
  • 加盟培训机构深圳谷歌seo推广
  • 青年汇网站开发公司企业网站怎么形成二维码
  • 网站开发必须要搭建环境吗.net电子商务网站开发
  • 秦皇岛网络编辑网站企业网站的在线推广方法有哪几种
  • 桂林网站建设网站开发产品设计公司
  • 优化网站 优帮云全民体育世界杯
  • 邯郸网站建设找谁海珠一站式网站建设
  • 某公司的网站建设的资金预算书网站背景素材
  • 石家庄网站设计公司中国标准溶液网站建设
  • 南通网站建设公司哪个好淄博网上商城制作
  • 公司网站设计好网站建设选亿企网络
  • 做苗木的用什么网站建手机网站
  • cms(网站内容管理系统)有哪些网站备案期间可以访问吗
  • 网站怎样做才能有点击率提供网站建设备案
  • 礼品回收网站建设怎么申请自己的域名
  • 瑞丽航空公司官方网站wordpress客户端插件下载