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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
access 转 sql server DB_CreateSqlEV1.06 CooSel2.0 CreateSQL CooSel2.0 CreateSQL V1.05 档案包含 ASP 和 Exe 两个版本 Asp版本不支持直接导入到SQLserver,只支持脚本的编写 Exe 版本可以直接导入到SQLserver 功能: 生成升迁 SQL脚本,保存为 *.sql文件后,SQL2000的查询分析器里调入执行 生成升迁 ASP脚本,这样你可以用该脚本和相应MDB数据库上传到服务器在线升迁 直接执行Access数据导入到SQL2000服务器(表结构和数据) V1.03 版本修正 bit 类型在默认数值不能正常转换的问题 时间默认值增加转换 time() date() 为 getdate() 视图的Vba函数未作处理,稍候版本会推出支持对应SQLserver的T-SQL转换 V1.04 支持输入建库和登陆创建 支持Access直接导入SQL V1.05 版本添加直接导入SQLserver功能 添加导入选项 全部表 索引 按Unicode编码导入,是否生成导入数据等 修正默认值处理外围单双引号的问题,Access的默认值包围是没有单引号的,有的错误以为比如设置为空字符为 '' 对access来说是错误的,不等同于SQLserver中的(''),导入程序对此自动修正 V1.05找了很多论坛和整站数据库作了测试,都成功导入 程序生成从 Access2000 MDB 数据库到 SQL server的升迁脚本(表结构和数据) 包括默认,索引主键外键视图 和整个MDB库里的表 ---------------- 源码编制: MiscroSoft Visual Basic 6.0 编译环境: windows2000 server 2.00.2195 SP4 如果提示 COMDLG32.OCX 版本过期 用随程序提供的 COMDLG32.OCX 替代 windows\system32\COMDLG32.OCX 下的 或者运行regocx.exe 重注册一下COMDLG32.OCX控件 注意备份源文件名,微软的文件选取对话框控件 ------------------------------------------------------ 详情请关注经典论坛数据库版和Paintblue.net的程序发布区 程序编制: V37 paintblue.net (2004-11-20) 版权所有: paintblue.net | blueidea.com 无论商业还是免费,你可以自由使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值