根据java 实体类生成建表语句
直接上代码:
package com.sql; import oa.entity.User; import java.io.File; import java.io.IOException; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; /*** * 通过java Class 创建 建表语句 */ public class CreateTable { public static Map<String, String> javaProperty2SqlColumnMap = new HashMap<>(); static { javaProperty2SqlColumnMap.put("Integer", "INTEGER"); javaProperty2SqlColumnMap.put("Short", "tinyint"); javaProperty2SqlColumnMap.put("Long", "bigint"); javaProperty2SqlColumnMap.put("BigDecimal", "decimal(19,2)"); javaProperty2SqlColumnMap.put("Double", "double precision not null"); javaProperty2SqlColumnMap.put("Float", "float"); javaProperty2SqlColumnMap.put("Boolean", "bit"); javaProperty2SqlColumnMap.put("Timestamp", "datetime"); javaProperty2SqlColumnMap.put("String", "VARCHAR(255)"); } /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { createTable(User.class, null); // createTable(Book.class, null); } public static String createTable(Class obj, String tableName) throws IOException { Field[] fields = null; fields = obj.getDeclaredFields(); // Class annotationType = null; String param = null; String column = null; // XmlElement xmlElement = null; StringBuilder sb = null; sb = new StringBuilder(50); if (tableName == null || tableName.equals("")) { //未传表明默认用类名 tableName = obj.getName(); tableName = tableName.substring(tableName.lastIndexOf(".") + 1); } // sb.append("\r\ndrop table if exists ").append(tableName).append(";\r\n"); sb.append("create table ").append(tableName).append(" ( \r\n"); System.out.println(tableName); boolean firstId = true; File file = null; for (Field f : fields) { column = f.getName(); if (column.equals("serialVersionUID")) { continue; } // sb.append(column).append(" "); // System.out.println(column + "," + f.getType()); param = f.getType().getSimpleName(); sb.append(column);//一般第一个是主键 sb.append(" ").append(javaProperty2SqlColumnMap.get(param)).append(" "); /*if (param instanceof Integer) { sb.append(" INTEGER "); } else if (param instanceof Short) { sb.append(" tinyint "); } else if (param instanceof Long) { sb.append(" bigint "); } else if (param instanceof BigDecimal) { sb.append(" decimal(19,2) "); } else if (param instanceof Double) { sb.append(" double precision not null "); } else if (param instanceof Float) { sb.append(" float "); } else if (param instanceof Boolean) { sb.append(" bit "); } else if (param instanceof Timestamp) { sb.append(" datetime "); } else { sb.append(" ");//根据需要自行修改 }*/ if (firstId) {//类型转换 sb.append(" PRIMARY KEY "); firstId = false; } //获取字段中包含fieldMeta的注解 //2、获取属性上的所有注释 Annotation[] allAnnotations = f.getAnnotations(); /*for(Annotation an : allAnnotations){ sb.append(" COMMIT '"); xmlElement = (XmlElement)an; annotationType = an.annotationType(); param = ((XmlElement) an).name(); System.out.println("属性【"+f.getName()+"-----的注释类型有: " + param); sb.append(param).append("'"); }*/ sb.append(",\n "); } String sql = null; sql = sb.toString(); //去掉最后一个逗号 int lastIndex = sql.lastIndexOf(","); sql = sql.substring(0, lastIndex) + sql.substring(lastIndex + 1); sql = sql.substring(0, sql.length() - 1) + " )ENGINE =INNODB DEFAULT CHARSET= utf8;\r\n"; System.out.println("sql :" + sql); //复制到剪切板 WindowUtil.setSysClipboardText(sql); // ToastMessage.toast("复制到剪切板",2000, Color.blue); return sql; /*file = new File("WebContent/createTable/建表.txt"); if (!file.getParentFile().exists()) { if (!file.getParentFile().mkdirs()) { } } if (!file.exists()) { file.createNewFile(); } System.out.println("文件路径:"+file.getAbsolutePath()); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file,true))); out.write(sql) ; out.flush(); out.close() ;*/ } }
相关推荐
好用的java实体转MySQL建表语句,非常实用,不好使你找我!
通过使用本工具,用户可以直接输入MySQL的建表语句,工具将自动解析语句中的字段、数据类型,并生成对应的Java实体类代码。这不仅避免了手动编写实体类的繁琐工作,还减少了因人为错误导致的代码问题。 此外,该...
因为公司之前使用JPA,先写实体类再生产数据库建表语句,这样会有一个问题,数据建表语句都是没有注释的,对于新来的同事非常不友好,同时在开发中需要看字段意义的时候也并不方便,并且字段的类型和长度都需要显示的...
给一个表名,自动生成java实体类,方便实用容易上手。前提,表中至少有一条数据。
Java实现的一个idea插件,用于实体转Mysql、oracle建表语句和json请求体的工具 使用 1、安装 下载发行版,打开idea:settings->plugins->intall plugin from disk 2、使用 打开实体类,右键选择ToMysql/ToOracle/To...
3、新增选择实体注解功能,生成实体的时候自动为实体添加额外的注解。 4、弹出对话框界面大小调整。 5、新增数据源添加默认设置。 6、精确匹配在点更多时,已选中的表会在弹出的列表中被勾选中。 7、修复模糊...
Sqlbean是一款通过Java语法生成SQL语句的ORM插件,其理念是弱化在开发阶段对数据库的操作,无需先建表再开发,可直接编写实体类和业务代码,项目启动后自动创建表和维护表结构。内置大量常用方法,支持灵活的条件...
使用springboot方式自动生成控制、业务层、dao、mapper,提供新增,修改,删除,分页查询功能
3、可生成JAVA、DELPHI的实体类代码 4、可生成sqlserver的建表sql脚本 5、可将查询数据导出为EXCEL表,每5万为单位进行文件分割 6、可生成insert、update、delete语句的模版 7、可根据查询结果生成insert语句 8、...
通过浏览器打开文件,如何建表语句的sql语句,即可生成对应的实体类Java代码
从.java到.class再到类加载执行的过程对SQL语句进行先编译再执行,时间有限,,只有一 星期时间,细节方面没考虑很多,代码也没怎么重构,看起来有点凌乱。。。 1.执行过程思路:先根据sql语法把sql字符串切割成...
通过书写实体类,在实体类上就注解,程序生成表结构. 通过书写sql语句,返回map或list结构表示单条记录或多条记录. sqlit-tools-android V0.1不能做的事: 不提供多表关系与实体类进行映射的功能,sqlit-tools并不是...
可通过实体类在生成自动建表,自动加索引,自动更新数据列。可检测出数据库与实体类之间的差异并在日志中打印出对应警告或修复用的sql语句。如警告:数据库中的列[mysql_name-> mysqlName]在实体类Admin不存在;支持...
可通过实体类在生成自动建表,自动加索引,自动更新数据列。 可检测出数据库与实体类之间的差异并在日志中打印出对应警告或者修复用的sql语句。 如 warn : 数据库中的列 [mysql_name --> mysqlName] 在实体类 ...
可通过实体类在生成自动建表,自动加索引,自动更新数据列。 可检测出数据库与实体类之间的差异并在日志中打印出对饮警告或者修复用的sql语句。 如 warn : 数据库中的列 [mysql_ame --> mysqlNname] 在实体类 ...
直接从SQL语句问题贴子数据建表并生成建表语句的存储过程 从SQL中的一个表中导出HTML文件表格 获取數据库表的前N条记录 几段SQL Server语句和存储过程 生成表中的数据的脚本 最详细的SQL注入相关的命令整理 Oracle ...
EF-ORM是一个轻量,便捷的Java ORM框架。并且具备若干企业级的应用特性,如分库分表、JTA事务等。 代码生成插件for eclipse(请在eclipse中Help/Install new software后输入地址并安装)...
7、发布元数据,生成JAVA 源代码.....................................................................................24 8、修改列表界面代码..................................................................