java creat sql,java 实体类 生成 create sql
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相关推荐
- c mysql实体类生成工具_【干货分享】C# 实体类生成工具
前言: 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类.放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码.所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形 ...
- 根据java实体类生成创建表sql步骤
根据java实体类生成创建表sql步骤 根据java实体类生成创建表sql语句时,方法是利用java反射+AOP注解,主要步骤如下: 1.注解类 一般在生成表的时候,需要表名.主键名.字段名,对应到注 ...
- java实体类生成mysql表_springboot+mybatis通过实体类自动生成数据库表的方法
前言 本章介绍使用mybatis结合mysql数据库自动根据实体类生成相关的数据库表. 首先引入相关的pom包我这里使用的是springboot2.1.8.RELEASE的版本 org.mybatis ...
- mybatis逆向工程的使用,自动生成实体类与基础SQL
目录 简介 mybatis逆向工程的使用 导入依赖 编写逆向工程配置文件 编写执行方法 查看结果 简介 来分享一个比较使用的玩意,mybatis的逆向工程,可以自动生成实体类.基础SQL映射文件.Ma ...
- java中如何遍历实体类的属性和数据类型以及属性值
package com.walkerjava.test;import java.lang.reflect.Field;import java.lang.reflect.InvocationTarget ...
- [开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码
前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...
- Springboot根据实体类生成数据库表
springboot数据库(一)-springboot-JPA JPA:springboot -jpa:数据库的一系列的定义数据持久化的标准的体系 学习的目的是: 利用springboot实现对数据库 ...
- 根据实体类生成数据库表
参考文档地址:通过实体类生成数据库表_weixin_44571808的博客-CSDN博客_java实体类生成数据库表 注意springboot版本号需要比较低(没有详细测试2.6不行,2.1.11可以 ...
- java怎么看dao文件_java通过实体类生成dao文件
package generate; import java.io.File; import java.io.FileWriter; import java.io.IOException; import ...
- Spring Boot配置Mysql后无法根据java实体类生成table
https://www.imooc.com/qadetail/193270?t=292816 检查了两天,没找到问题.原因为实体类必须在主程序application的同名包或者子包下面,启动时才会扫描 ...
最新文章
- 西安电子科技大学第16届程序设计竞赛 F题
- 3/3 常用符号:转义字符
- 20. 有效的括号 golang 堆栈
- Python--day48--ORM框架SQLAlchemy操作表
- php改名下载,PHP如何给上传的文件改名
- 微信iOS版本推出深色模式,网友:终于可以“好好熬夜”了!
- 安装与优化 98
- 个人信用报告“数字解读”与妙用
- 高等微積分(高木貞治) 1.4節 例2
- SlidingMenu使用笔记
- Python中如何清空Queue?
- ABBYY软件对PDF文本审阅操作之盖章
- 信息学奥赛一本通(1079:计算分数加减表达式的值)
- lua fadeOut
- postman发送图片
- 连接MySQL实现增删改查的动态网页
- 关于安装jdk后为什么要配置环境变量的那些事
- 已知销售额怎么计算成本_知道销售总额怎么计算成本价?
- POJ 2954-Triangle(计算几何+皮克定理)
- 使用云主机进行深度学习