1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
| package cn.eangaie.cloud.wx3562;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Console; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty;
import java.lang.reflect.Field; import java.util.*; import java.util.stream.Collectors;
import static java.lang.Character.isUpperCase;
public class EntityToTable {
static List<String> typeList = new ArrayList<>();
public static void main(String[] args) throws ClassNotFoundException { EntityToTable entityToTable = new EntityToTable(); String packageTitle = "cn.eangaie.cloud.wx3562.entity."; String packagePath = "E:\\workspace\\kehu\\3562\\wx3562-backend\\cloud-wx3562\\src\\main\\java\\cn\\eangaie\\cloud\\wx3562\\entity"; List<String> tableArr = getTableArr(packagePath); for (String tb : tableArr) { String sql = entityToTable.generateTableMysql(packageTitle + tb, true); Console.log(sql); } Console.log("typeList", typeList); }
private static List<String> getTableArr(String packagePath) { return FileUtil.listFileNames(packagePath).stream().map(o -> o.substring(0, o.length() - 5)).collect(Collectors.toList()); }
private static final Map<String, String> dataTypeMap = new HashMap<>();
static { dataTypeMap.put("java.lang.String", "VARCHAR(255)"); dataTypeMap.put("int", "INT"); dataTypeMap.put("java.lang.Integer", "INT"); dataTypeMap.put("long", "BIGINT"); dataTypeMap.put("java.lang.Long", "BIGINT"); dataTypeMap.put("float", "FLOAT"); dataTypeMap.put("java.lang.Float", "FLOAT"); dataTypeMap.put("double", "DOUBLE"); dataTypeMap.put("java.lang.Double", "DOUBLE"); dataTypeMap.put("boolean", "BOOLEAN"); dataTypeMap.put("java.lang.Boolean", "BOOLEAN"); dataTypeMap.put("java.math.BigDecimal", "DECIMAL(10, 2)"); }
public String generateTableMysql(String beanName, boolean isConvert) { StringBuilder sqlSb = new StringBuilder(); if (null != beanName && !"".equals(beanName)) { Object obj = null; try { obj = Class.forName(beanName).newInstance(); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { e.printStackTrace(); } Class<?> clz = obj.getClass(); Field[] fields = clz.getDeclaredFields(); TableName tableClass; tableClass = clz.getAnnotation(TableName.class); String tableName = tableClass.value(); sqlSb.append("CREATE TABLE IF NOT EXISTS ").append(tableName).append(" ( "); for (Field field : fields) { if (!field.isAccessible()) field.setAccessible(true); String type = field.getType().getTypeName(); if (!type.contains(".") || type.contains("java.")) { if (!field.getType().equals(List.class)) { String name = field.getName(); if ("serialVersionUID".equals(name)) continue; StringBuilder convertName = new StringBuilder(); convertName.append(name); if (isConvert) { convertName = new StringBuilder(); for (int i = 0; i < name.length(); i++) { if (isUpperCase(name.charAt(i))) convertName.append("_"); convertName.append(name.charAt(i)); } } name = convertName.toString().toLowerCase(Locale.ROOT); sqlSb.append(name).append(" "); String societySqlType = societyMysql(type); sqlSb.append(societySqlType); intFiledFilter(name, societySqlType, sqlSb); if (field.isAnnotationPresent(TableId.class)) { if ("int".equals(type)) sqlSb.append("AUTO_INCREMENT "); sqlSb.append("PRIMARY KEY "); } sqlSb.append("comment "); if (field.isAnnotationPresent(ApiModelProperty.class)) { ApiModelProperty explain = field.getAnnotation(ApiModelProperty.class); sqlSb.append("'").append(explain.value()).append("',"); } else { sqlSb.append("'',"); } } } } if (sqlSb.lastIndexOf(",") == sqlSb.length() - 1) sqlSb = sqlSb.deleteCharAt(sqlSb.length() - 1); sqlSb.append(");"); } return sqlSb.toString(); }
private void intFiledFilter(String name, String societySqlType, StringBuilder sqlSb) { if ("INT".equals(societySqlType)) { if (name.contains("state") || name.contains("status") || name.contains("flag")|| name.contains("is_")) sqlSb.append("(1)"); } sqlSb.append(" "); }
private String societyMysql(String type) { if (!typeList.contains(type)) typeList.add(type); String mySQLDataType = dataTypeMap.get(type); if (mySQLDataType == null) mySQLDataType = "VARCHAR(255)"; return mySQLDataType; }
}
|