java实体转为数据库建表语句

package com.mashibing.admin;import cn.hutool.core.text.StrBuilder;
import cn.hutool.core.util.StrUtil;import java.io.*;
import java.lang.reflect.Field;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;/*** java实体转为数据库建表语句* @author fangdy* @date 2022-11-25 10:17*/
public class CreateTableSqlFromEntityUtil {public static void main(String[] a) {// 实体类的位置List<Class> classList = Arrays.asList(User.class);// 生成的sql语句的位置String outputPath = "D:\\excel\\user.txt";StrBuilder sb = new StrBuilder();classList.forEach(x->{String sql = generateTableSql(x, null);sb.append(sql);sb.append("\n");});writeFile(sb.toString(), outputPath);System.out.println("生成结束");}public static void writeFile(String content, String outputPath) {File file = new File(outputPath);System.out.println("文件路径: " + file.getAbsolutePath());// 输出文件的路径if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}FileOutputStream fos = null;OutputStreamWriter osw = null;BufferedWriter out = null;try {// 如果文件存在,就删除if (file.exists()) {file.delete();}file.createNewFile();fos = new FileOutputStream(file, true);osw = new OutputStreamWriter(fos);out = new BufferedWriter(osw);out.write(content);// 清空缓冲流,把缓冲流里的文本数据写入到目标文件里out.flush();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {fos.close();} catch (IOException e) {e.printStackTrace();}try {osw.close();} catch (IOException e) {e.printStackTrace();}try {out.close();} catch (IOException e) {e.printStackTrace();}}}public static String generateTableSql(Class obj,  String tableName) {// tableName 如果是 null,就用类名做表名if (tableName == null || tableName.equals("")) {tableName = obj.getName();tableName = tableName.substring(tableName.lastIndexOf(".") + 1);tableName = StrUtil.toUnderlineCase(tableName);}// 表名用大写字母
//        tableName = tableName.toUpperCase();Field[] fields = obj.getDeclaredFields();String column;StringBuilder sb = new StringBuilder();sb.append("drop table if exists ").append(tableName).append(";\r\n");sb.append("\r\n");sb.append("create table ").append(tableName).append("(\r\n");System.out.println(tableName);for (int i = 0; i < fields.length; i++) {Field f = fields[i];column = f.getName();Class<?> type = f.getType();System.out.println(column + ", " + type.getSimpleName());String typeName = type.getTypeName();sb.append( StrUtil.toUnderlineCase(column)); // 一般第一个是主键if (typeName.equals("java.lang.Integer")) {sb.append(" int(11) ");} else if (typeName.equals("java.lang.Long")) {sb.append(" bigint(20) ");} else if (typeName.equals("java.lang.Float")) {sb.append(" float(11,5) ");} else if (typeName.equals("java.time.LocalDate")) {sb.append(" date ");} else if (typeName.equals("java.time.LocalDateTime") || typeName.equals("java.util.Date")) {sb.append(" datetime ");} else {// 注意:根据需要,自行修改 varchar 的长度。这里设定为长度等于 50sb.append(" varchar(" + 50 + ") " );}if (column.equals("id")){if (StrUtil.equalsAny(tableName,"java.lang.Integer","java.lang.Long")){sb.append(" not null AUTO_INCREMENT ");}else {sb.append(" not null ");}}// todo 增加对字段的注解的处理sb.append(", ");sb.append("\n");}sb.append(" PRIMARY KEY (`id`) USING BTREE");String sql = sb.toString();sql = sb.substring(0, sql.length()) + "\n) " + "ENGINE = INNODB DEFAULT CHARSET = utf8mb4;";return sql;}
}class User{private String id;private String username;private String password;private LocalDateTime createTime;private LocalDateTime updateTime;
}

参考文章:https://blog.csdn.net/weixin_44893902/article/details/118905968

java实体转为数据库建表语句相关推荐

  1. PowerDesigner,如何将Oracle数据库建表语句转化成Mysql数据库建表语句。

    在实际工作中,一张表,我们可能需要在Mysql数据库中建表,又要在Oracle数据库中建表.表中每个字段的数据类型.中文注释.是否可为NULL 问题,非常影响我们建表的效率.本篇文章,以Oracle数 ...

  2. PowerDesigner,如何将Mysql数据库建表语句转化成Oracle数据库建表语句。

    在实际工作中,一张表,我们可能需要在Mysql数据库中建表,又要在Oracle数据库中建表.表中每个字段的数据类型.中文注释.是否可为NULL 问题,非常影响我们建表的效率.本篇文章,以Mysql数据 ...

  3. 获取impala下所有的数据库建表语句

    本博文介绍三种方法,推荐使用第三种,前两种都是尝试. 方法一: 现在的导出还是有缺陷的,导出的文件中还是存在其他不必要的信息 #!/bin/bash ##获取数据库 databases=$(hive ...

  4. oracle数据库建表语句

    1.一个用户可以有多个角色 2.一个用户可以有多个权限 3.一个权限也可以给多个用户 Oracle 系统默认用户 system:是数据库内置的一个普通管理员 sys:用数据库的超级用户,必须以 sys ...

  5. 根据Oracle数据库已存在的表生成其他数据库建表语句

    文章目录 写这个Demo的出发点 Demo中还存在的问题 期望将来能实现的 生成的建表语句 源代码 写这个Demo的出发点 入职刚半年的菜鸟一枚,公司项目需支持Oracle.Mysql.DB2三个库, ...

  6. mysql建表语句 numeric_数据库建表语句

    展开全部 CREATE TABLE语句,用32313133353236313431303231363533e78988e69d8331333433616139于在数据库中创建新表.语法:CREATE ...

  7. MySQL数据库建表语句

    **建立一个叫student的表** CREATE TABLE`student`( **id为int类型设置不能为空值** `id` INT NOT NULL auto_increment prima ...

  8. 使用oracle数据库建表语句,怎么使用sql查询oracle建表语句

    SELECT CREATETION AS "年份" ,SUM(DATE_ROW01) AS "01月" ,SUM(DATE_ROW02) AS "02 ...

  9. JAVA读取Excel表格,建数据库建表,并生成java实体实例

    转自:https://blog.csdn.net/wuyongde_0922/article/details/43233413 JAVA读取Excel表格,建数据库建表,并生成java实体实例,这一篇 ...

最新文章

  1. PyQt5 技术篇-plainTextEdit控件获得文本内容方法、设置文本内容方法。
  2. Mysql闪回工具之binlog2sql的原理及其使用
  3. 用汇编写系统服务程序
  4. 我如何使用Python帮助我选择了Google Summer of Code '19的组织
  5. 数组和JSON之间的格式转换
  6. [SQL实战]之统计出当前各个title类型对应的员工当前薪水对应的平均工资
  7. 计算机应用基础000,《计算机应用基础》教学导案000001.doc
  8. docker构建mysql容器及Navicat 远程连接
  9. spring 的web.xml的加载顺序
  10. 0x68111002_黑苹果10.12.2驱动R9 270显卡成功一例
  11. k3梅林单线双拨教程_斐讯 K3 路由器刷入 OpenWrt LEDE 固件教程,支持多拨及去广告...
  12. 小米10青春版刷鸿蒙,没有高刷弱不禁风?小米10青春版刷新低价,这次用户或许会满意!...
  13. 人人网主页登录_“人人网”回来了!网友炸锅:有人想找前女友,有人想删“黑历史”……...
  14. 地震速度分析matlab程序,地震波频谱分析。。。。。
  15. mbit职业测试软件,MBTI职业性格测试(自动计算版)-
  16. SOHO设计师的多年工作经验总结
  17. 【HTML】07-表单
  18. 通用样式 -表格的每行的复选框选中打印
  19. 从键盘任意输入一个年号,判断它是否是闰年。
  20. No7.基本数据类型的包装类

热门文章

  1. 值得学习与推荐的c/c++框架和函数库
  2. linux进行远程登录的命令sed,Linux sed 命令
  3. c 语言 int argc,C语言深度学习之int main(int argc,char **argv)的理解及延申
  4. Java ApachePOI Excel 设置强制换行
  5. django-admin动态多选框表单实现
  6. wrs-jpush极光推送原生app插件
  7. Flash CS3动画设计150例
  8. PHP环境搭建-Windows系统下PHP环境搭建
  9. Web安全—Web框架组成和各部分作用(持续更新)
  10. [附源码]java毕业设计商务酒店管理系统