package com.fresh.utils;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.lang.reflect.Field;
import java.util.*;
public class BeanSQLUtils {
static Map columnMap = null;
static Map propertyMap = null;
static {
columnMap = new HashMap<>();
columnMap.put("java.lang.Long", "`%s` bigint(20) NOT NULL AUTO_INCREMENT,n");
columnMap.put("java.lang.String", "`%s` varchar(255) DEFAULT NULL,n");
columnMap.put("java.lang.Integer", "`%s` int(11) DEFAULT NULL,n ");
columnMap.put("java.util.Date", "`%s` datetime DEFAULT NULL, n ");
columnMap.put("java.math.BigDecimal", "`%s` decimal(10,2) DEFAULT NULL, n ");
columnMap.put("java.lang.Boolean", "`%s` bit(1) DEFAULT NULL,n");
columnMap.put("java.lang.Double", "`%s` double(10,2) DEFAULT NULL,n");
columnMap.put("java.lang.Float", "`%s` float(10,2) DEFAULT NULL,");
columnMap.put("primaryKey", " PRIMARY KEY (`id`) n");
propertyMap = new HashMap<>();
propertyMap.put("bigint", "ttttprivate java.lang.Long %s ; n");
propertyMap.put("varchar", "ttttprivate java.lang.String %s ; n");
propertyMap.put("char", "ttttprivate java.lang.String %s ; n");
propertyMap.put("int", "ttttprivate java.lang.Integer %s ; n");
propertyMap.put("datetime", "ttttprivate java.util.Date %s ; n");
propertyMap.put("date", "ttttprivate java.util.Date %s ; n");
propertyMap.put("decimal", "ttttprivate java.math.BigDecimal %s ; n");
propertyMap.put("bit", "ttttprivate java.lang.Boolean %s ; n");
propertyMap.put("double", "ttttprivate java.lang.Double %s ; n");
propertyMap.put("float", "ttttprivate java.lang.Float %s ; n");
}
public static void main(String[] args) throws ClassNotFoundException {
StringBuffer sb = new StringBuffer();
sb.append(" CREATE TABLE `t` (n" +
" `id` bigint(20) NOT NULL AUTO_INCREMENT,n" +
" `user_name` varchar(255) DEFAULT NULL,n" +
" `price` decimal(10,2) DEFAULT NULL,n" +
" `create_time` datetime DEFAULT NULL,n" +
" `num` int(11) DEFAULT NULL,n" +
" `percent` double(10,2) DEFAULT NULL,n" +
" `adder` float(10,2) DEFAULT NULL,n" +
" `state` bit(1) DEFAULT NULL,n" +
" PRIMARY KEY (`id`)n" +
") ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;");
System.out.println(toBeanContent(sb.toString()));
}
private static void toMysqlscript(List list) throws ClassNotFoundException {
for (String item : list) {
Class> aClass = Class.forName(item);
String simpleName = aClass.getSimpleName();
String tableName = toHump(simpleName, false);
StringBuffer sb = new StringBuffer();
Field[] declaredFields = aClass.getDeclaredFields();
for (Field field : declaredFields) {
sb.append(toMYSQLColumn(field.getType().getName(), toUnderscore(field.getName())));
}
sb.append(columnMap.get("primaryKey"));
System.err.println(String.format("CREATE TABLE `%s` (n%s ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;n", toUnderscore(tableName), sb.toString()));
}
}
private static String toHump(String target, Boolean isTableName) {
if (target == null || "".equals(target)) {
return target;
}
char[] chars = target.toCharArray();
StringBuffer sb = new StringBuffer();
for (int j = 0; j < chars.length; j++) {
if (chars[j] == '_' && j + 1 < chars.length) {
chars[j + 1] = Character.toUpperCase(chars[j + 1]);
}
if (chars[j] != '_') {
if (j == 0) {
chars[j] = Character.toLowerCase(chars[j]);
}
if (isTableName && j == 0) {
chars[j] = Character.toUpperCase(chars[j]);
}
sb.append(chars[j]);
}
}
return sb.toString();
}
public static String toUnderscore(String property) {// 下划线
char[] chars = property.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < chars.length; i++) {
char aChar = chars[i];
if (Character.isUpperCase(aChar)) {
sb.append(i == 0 ? "" : "_");
sb.append(Character.toLowerCase(aChar));
continue;
}
sb.append(aChar);
}
return sb.toString();
}
private static String toMYSQLColumn(String name, String fieldName) {
return String.format(columnMap.get(name), fieldName);
}
private static ArrayList getCompleteClassName(String path) {
File file = new File(path);
System.out.println(file.isDirectory());
File[] files = file.listFiles();
ArrayList list = new ArrayList<>();
for (File item : files) {
String replace = item.getName().replace(".java", "");
String absolutePath = file.getAbsolutePath();
String newPackName = absolutePath.substring(absolutePath.indexOf("com"), absolutePath.length()).replace("\", ".");
String classPack = newPackName + "." + replace;
list.add(classPack);
}
return list;
}
private static String toBeanContent(String sql) {
StringBuffer buffer = new StringBuffer();
String tableName = sql.substring(sql.indexOf("`"), sql.indexOf("(")).trim().replace("`", "");// 获取表名
String beanName = toHump(tableName, true);
String columns = sql.substring(sql.indexOf("(") + 1, sql.lastIndexOf(")"));// 获取字段内容部分
String[] propertyList = columns.split("n");// 分割
StringBuffer pf = new StringBuffer();
for (String item : propertyList) {
String result = toPropertyContent(item);
if (StringUtils.isNotBlank(result)) {
pf.append(result);
}
}
buffer.append(String.format("public class %s { n %s n }", beanName, pf));
return buffer.toString();
}
private static String toPropertyContent(String columnContent) {
if (columnContent.indexOf("`") != -1) {
String result = columnContent.substring(columnContent.indexOf("`") + 1, columnContent.lastIndexOf("`"));
Set nameSet = propertyMap.keySet();
Iterator iterator = nameSet.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
if (columnContent.contains(next)) {
return String.format(propertyMap.get(next), toHump(result, false));
}
}
}
return null;
}
}