import java.lang.reflect.Field;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/***

*

* @author Brandon Leaf

* @date 2021/1/20 16:01

* @description

* 生成器

*/

public class Gener {

private final Map, String> typeMap = new HashMap<>();

/**

* 初始化类型映射表

*/

private void initDefaultTypeMap() {

typeMap.put(String.class, "VARCHAR2(100 BYTE)");

typeMap.put(Long.class, "NUMBER");

typeMap.put(Double.class, "NUMBER(*,6)");

typeMap.put(Integer.class, "NUMBER");

}

public Gener() {

if (typeMap.isEmpty()) {

initDefaultTypeMap();

}

}

/**

*

* @param customTypeMap 自定义映射表

*/

public Gener(Map, String> customTypeMap) {

typeMap.putAll(customTypeMap);

}

/**

*

* @param classList 类列表

* @param tablePrefix 表前缀

* @return create sql

*/

public String genCreateSql(List> classList, String tablePrefix) {

StringBuilder sb = new StringBuilder("-- =====entity to create sql=====\n");

for (Class> c : classList) {

Field[] declaredFields = c.getDeclaredFields();

List fieldList = new ArrayList<>();

for(Field f : declaredFields){

String type = typeMap.get(f.getType());

if(type!=null){

fieldList.add(f);

}

}

if(fieldList.isEmpty()){

continue;

}

//title

String tableName = c.getSimpleName();

String sqlTableName = enCodeUnderlined(tableName);

if (tablePrefix != null) {

sqlTableName = tablePrefix.toUpperCase() + sqlTableName.toUpperCase();

}

sb.append("-- =====").append(tableName).append("=====").append(sqlTableName).append("=====\n\n\t");

sb.append("CREATE TABLE \"").append(sqlTableName).append("\" (\n\t");

//todo columns

for (int i = 0; i < fieldList.size(); i++) {

Field f = fieldList.get(i);

String type = typeMap.get(f.getType());

String name = f.getName();

sb.append("\"").append(enCodeUnderlined(name).toUpperCase()).append("\" ").append(type);

if (i != (fieldList.size() - 1)) {

sb.append(" ,\n\t");

}

}

sb.append("\n\t);\n\n");

//todo remark

}

return sb.toString();

}

// 首字母转小写

public static String toLowerCaseFirstOne(String s) {

if (Character.isLowerCase(s.charAt(0)))

return s;

else

return Character.toLowerCase(s.charAt(0)) +

s.substring(1);

}

// 大写字母前面加上下划线并转为全小写

public static String enCodeUnderlined(String s) {

char[] chars = toLowerCaseFirstOne(s).toCharArray();

StringBuilder temp = new StringBuilder();

for (char aChar : chars) {

if (Character.isUpperCase(aChar)) {

temp.append("_");

}

temp.append(Character.toLowerCase(aChar));

}

return temp.toString();

}

/**

* demo

*/

public static void main(String[] args) {

Gener gener = new Gener();

String s = gener.genCreateSql(

List.of(Test1.class,

Test2.class,

Test3.class

)

, "TEST_");

//打印sql

System.out.println(s);

}

}

java creat sql,java 实体类 生成 create sql相关推荐

  1. c mysql实体类生成工具_【干货分享】C# 实体类生成工具

    前言: 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类.放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码.所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形 ...

  2. 根据java实体类生成创建表sql步骤

    根据java实体类生成创建表sql步骤 根据java实体类生成创建表sql语句时,方法是利用java反射+AOP注解,主要步骤如下: 1.注解类 一般在生成表的时候,需要表名.主键名.字段名,对应到注 ...

  3. java实体类生成mysql表_springboot+mybatis通过实体类自动生成数据库表的方法

    前言 本章介绍使用mybatis结合mysql数据库自动根据实体类生成相关的数据库表. 首先引入相关的pom包我这里使用的是springboot2.1.8.RELEASE的版本 org.mybatis ...

  4. mybatis逆向工程的使用,自动生成实体类与基础SQL

    目录 简介 mybatis逆向工程的使用 导入依赖 编写逆向工程配置文件 编写执行方法 查看结果 简介 来分享一个比较使用的玩意,mybatis的逆向工程,可以自动生成实体类.基础SQL映射文件.Ma ...

  5. java中如何遍历实体类的属性和数据类型以及属性值

    package com.walkerjava.test;import java.lang.reflect.Field;import java.lang.reflect.InvocationTarget ...

  6. [开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码

    前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...

  7. Springboot根据实体类生成数据库表

    springboot数据库(一)-springboot-JPA JPA:springboot -jpa:数据库的一系列的定义数据持久化的标准的体系 学习的目的是: 利用springboot实现对数据库 ...

  8. 根据实体类生成数据库表

    参考文档地址:通过实体类生成数据库表_weixin_44571808的博客-CSDN博客_java实体类生成数据库表 注意springboot版本号需要比较低(没有详细测试2.6不行,2.1.11可以 ...

  9. java怎么看dao文件_java通过实体类生成dao文件

    package generate; import java.io.File; import java.io.FileWriter; import java.io.IOException; import ...

  10. Spring Boot配置Mysql后无法根据java实体类生成table

    https://www.imooc.com/qadetail/193270?t=292816 检查了两天,没找到问题.原因为实体类必须在主程序application的同名包或者子包下面,启动时才会扫描 ...

最新文章

  1. 西安电子科技大学第16届程序设计竞赛 F题
  2. 3/3 常用符号:转义字符
  3. 20. 有效的括号 golang 堆栈
  4. Python--day48--ORM框架SQLAlchemy操作表
  5. php改名下载,PHP如何给上传的文件改名
  6. 微信iOS版本推出深色模式,网友:终于可以“好好熬夜”了!
  7. 安装与优化   98
  8. 个人信用报告“数字解读”与妙用
  9. 高等微積分(高木貞治) 1.4節 例2
  10. SlidingMenu使用笔记
  11. Python中如何清空Queue?
  12. ABBYY软件对PDF文本审阅操作之盖章
  13. 信息学奥赛一本通(1079:计算分数加减表达式的值)
  14. lua fadeOut
  15. postman发送图片
  16. 连接MySQL实现增删改查的动态网页
  17. 关于安装jdk后为什么要配置环境变量的那些事
  18. 已知销售额怎么计算成本_知道销售总额怎么计算成本价?
  19. POJ 2954-Triangle(计算几何+皮克定理)
  20. 使用云主机进行深度学习

热门文章

  1. java 继承list_Java集合—List—继承关系
  2. 折线图x轴的日期会超出_折线图技巧丨阈限颜色设置
  3. Java—读取指定路径下文件的内容
  4. 【转】运用jieba库分词
  5. 一文读懂MapReduce
  6. 最新最全linux系统调优指南(centos7.X)
  7. 阿里的Atlas组件化框架
  8. asp.net的10个提升性能或扩展性的秘密(一)
  9. 背包问题2 (lintcode)
  10. CBD将建智慧城市管理平台