根据JAVA实体生成SQL建表语句

  • 以mysql为例:oracle或SQL Server修改拼接字符串即可。

以mysql为例:oracle或SQL Server修改拼接字符串即可。

package com.cgd.srm.tools;import lombok.extern.slf4j.Slf4j;import java.io.File;
import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;/*** @Title SqlGenerator* @Description   根据JAVA实体生成SQL建表语句工具* @Copyright: 版权所有 (c) 2018 - 2019* @Company: wt* @Author root* @Version 1.0.0* @Create 19-4-1 下午4:22*/
@Slf4j
public class SqlGenerator {public static Map<String, String> property2SqlColumnMap = new HashMap<>();static {property2SqlColumnMap.put("integer", "INT");property2SqlColumnMap.put("short", "tinyint");property2SqlColumnMap.put("long", "bigint");property2SqlColumnMap.put("bigdecimal", "decimal(19,2)");property2SqlColumnMap.put("double", "double precision not null");property2SqlColumnMap.put("float", "float");property2SqlColumnMap.put("boolean", "bit");property2SqlColumnMap.put("timestamp", "datetime");property2SqlColumnMap.put("date", "datetime");property2SqlColumnMap.put("string", "VARCHAR(500)");}public static String generateSql(String className,String tableName,String primaryKey,String filePath){try {Class<?> clz = Class.forName(className);className = clz.getSimpleName();Field[] fields = clz.getDeclaredFields();StringBuffer column = new StringBuffer();for (Field f : fields) {if (f.getName().equals(primaryKey)){continue;}//column.append(" \n `"+f.getName()+"`").append(varchar);column.append(getColumnSql(f));}String sqlPrimaryKey =StringUtils.camelToUnderline(primaryKey).toUpperCase();StringBuffer sql = new StringBuffer();sql.append("\n DROP TABLE IF EXISTS `"+tableName+"`; ").append(" \n CREATE TABLE `"+tableName+"`  (").append(" \n `"+sqlPrimaryKey+"` bigint(20) NOT NULL AUTO_INCREMENT,").append(" \n "+column).append(" \n PRIMARY KEY (`"+sqlPrimaryKey+"`)").append(" \n ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci;");String sqlText = sql.toString();StringToSql(sqlText,filePath);return sqlText;} catch (ClassNotFoundException e) {log.debug("SQL生成异常:",e);return null;}}private static String getColumnSql(Field field){String tpl = "\n `%s` %s DEFAULT NULL,";String typeName = field.getType().getSimpleName().toLowerCase();String sqlType = property2SqlColumnMap.get(typeName);if (sqlType == null || sqlType.isEmpty()){log.info(field.getName() + ":"+field.getType().getName()+" 需要单独创建表");return "";}String column =StringUtils.camelToUnderline(field.getName()).toUpperCase();String sql = String.format(tpl,column,sqlType.toUpperCase());return sql;}private static void StringToSql(String str,String path){byte[] sourceByte = str.getBytes();if(null != sourceByte){try {File file = new File(path);if (!file.exists()) {File dir = new File(file.getParent());dir.mkdirs();file.createNewFile();}FileOutputStream outStream = new FileOutputStream(file);outStream.write(sourceByte);outStream.flush();outStream.close();System.out.println("生成成功");} catch (Exception e) {log.debug("保存SQL文件异常:",e);}}}
}
注:复杂属性将不会自动生成,完成后需手动添加。

根据JAVA实体生成SQL建表语句相关推荐

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

    java实体转为数据库建表语句 package com.mashibing.admin;import cn.hutool.core.text.StrBuilder; import cn.hutool. ...

  2. Excel自动生成sql建表语句

    ETL开发中重新整理很多表结构,写建表语句又是一件头疼的事情,干脆借鉴网友的代码,自己写了一个自动生成建表sql的模板. 模板下载:http://download.csdn.net/detail/en ...

  3. python读取excel生成mysql建表语句_python读取excel文件并自动在mysql中建表导数据

    """ 根据excel在mysql中建表(表名为文件名,字段为csv中的header,默认所有字段为varchar,如需更改,在数据库中更改即可),并插入数据 " ...

  4. SpringBoot自动运行sql建表语句

    1.在Resources下添加建表的sql语句 2.配置文件 application.yml spring:datasource:username: rootpassword: adminurl: j ...

  5. 1.python 根据 oracle字段名和类型 生成 hive建表语句

    一.问题 遇到一个场景,要根据oracle表结构创建hive表. 本来想写一个根据oracle信息和表名自动在hive中创建表的脚本.如果在集群运行,python操作oracle的cx_Oracle在 ...

  6. mysql json建表_json数据自动生成MySQL建表语句

    #_*_coding:utf-8_*_ #author: cike #date: 18-9-13 import pymysql.cursors connection = pymysql.connect ...

  7. excel数据库设计表转换成sql建表语句

    序号 字段英文 字段中文 主键 类型 长度 单位 空否 默认值 备注 1. ID 自增ID N 11 2. REC_CREATOR 记录创建责任者 C 10 3. REC_CREATE_TIME 记录 ...

  8. python脚本实现自动生产sql建表语句

    一.代码效果 废话不多说,先上代码展示效果,然后讲解 1.1代码 import pandas as pd data = pd.read_excel('D:/示例1.xlsx') data = data ...

  9. 使用java通过固定的excel模板自动生成数据库表的ddl建表语句

    有时候要建很多表或一个表有很多字段,一个个复制字段弄太麻烦了,为了提高点工作效率,写了个小工具通过固定的excel模板自动生成基础的ddl建表语句 maven依赖 <!--核心jar包--> ...

  10. 使用java代码编写脚本,把oracle建表语句变成hive建表语句

    使用java代码编写脚本,把oracle建表语句变成hive建表语句 java代码 测试oracle.sql 生成hive创表语句 java代码 import java.io.File; import ...

最新文章

  1. VB 输入超出文件尾(错误62)(转)
  2. 线程池方式调用spring mvc的业务类的简单实例
  3. ubuntu下如何切换输入法
  4. Spring Validation 校验
  5. 计算机里FC方式,【计算机基础】在0和1的世界里来来回回
  6. web前端-----跨域
  7. 如何用hypermesh生成包含interface的流体网格
  8. C++ 引用计数技术及智能指针的简单实现
  9. CentOS7.5中Moodle 3.7之PHP Cli(命令行)方式安装
  10. tensorflow入门(一)波士顿房价数据集
  11. 多模块java项目代码混淆
  12. 在C语言中使用fflush(stdin)
  13. java中innerhtml_js中innerHTML与innerText的用法与区别 | 学步园
  14. Godaddy出售域名收益/收款提现探究——待续
  15. 在线标注协作服务Hypothes.is的简明教程
  16. 学计算机的演员,南开大学计算机系到演员 张桐回顾“不安分”的青春_TOM明星...
  17. html框架页面不允许滚动条,关于html:使用iframe时如何摆脱双滚动条?
  18. 松下服务器型号,WEA-ASC970/CH 松下综合型系统管理服务器
  19. node文件下载的方式
  20. 关于JavaScript框架介绍

热门文章

  1. 家庭收支软件用java写,eclipse编写的Java家庭收支记账软件
  2. 作为IT码农,我是如何给小孩取名字的(推荐收藏,总有需要的一天)
  3. 13号线ab线规划图_2018广州地铁13号线二期最新消息:计划今年开工 2022年底建成通车(附线路图+站点)...
  4. latex制作中英文简历(含模板代码)
  5. python selenium 下载附件通过oss上传
  6. 实现一个串口调试工具
  7. 加密狗映射至虚拟服务器,ESXI 5.1/5.5 主机添加或映射USB设备(加密狗)(示例代码)...
  8. android studio javah命令,Android Studio 配置 javah 和 ndk-build 快捷编译
  9. matlab 积分方程组,请问用matlab怎么解这个定积分方程组
  10. 【课程作业|图论】第四章课后习题