根据java 实体类生成建表语句

2018-03-01 12:24:15来源:作者:人点击

分享

根据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() ;*/ }}

 

 

 

生成建表语句生成建表SQL

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台