|
|
|
@ -11,6 +11,7 @@ import org.slf4j.LoggerFactory; |
|
|
|
|
|
|
|
|
|
import java.lang.reflect.Field; |
|
|
|
|
import java.util.*; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @author qi |
|
|
|
@ -21,6 +22,14 @@ public class MysqlBuilder extends AbstractDbBuiler { |
|
|
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(MysqlBuilder.class); |
|
|
|
|
|
|
|
|
|
private static Map<String,String> dataTypeMap=new HashMap<>(); |
|
|
|
|
/** |
|
|
|
|
* 数据库数据类型-char |
|
|
|
|
*/ |
|
|
|
|
public static final String DB_TYPE_CHAR = "char"; |
|
|
|
|
/** |
|
|
|
|
* 数据库数据类型-int |
|
|
|
|
*/ |
|
|
|
|
public static final String DB_TYPE_INT = "int"; |
|
|
|
|
|
|
|
|
|
static { |
|
|
|
|
dataTypeMap.put("class java.lang.String","varchar"); |
|
|
|
@ -35,26 +44,19 @@ public class MysqlBuilder extends AbstractDbBuiler { |
|
|
|
|
public String automaticUpdateDb(Set<Class> classSet,List<Table> tableList) { |
|
|
|
|
StringBuffer sql = new StringBuffer(); |
|
|
|
|
//扫描实体类包的实体class
|
|
|
|
|
Set<Class> set = classSet; |
|
|
|
|
Map<String, Class> map = new HashMap<>(set.size()); |
|
|
|
|
|
|
|
|
|
set.forEach((clazz)->{ |
|
|
|
|
map.put(BeanSqlUtil.beanNameToTableName(clazz), clazz); |
|
|
|
|
}); |
|
|
|
|
Map<String, Class> map = classSet.stream().collect(Collectors.toMap(BeanSqlUtil::beanNameToTableName,clazz->clazz)); |
|
|
|
|
//初始化的时候,tableList可能为null
|
|
|
|
|
if(tableList!=null) { |
|
|
|
|
tableList.forEach((table)->{ |
|
|
|
|
if(tableList!=null&&tableList.size()>0) { |
|
|
|
|
tableList.forEach(table->{ |
|
|
|
|
if (map.containsKey(table.getTableName())) { |
|
|
|
|
Class clazz = map.get(table.getTableName()); |
|
|
|
|
List<Field> fieldsList = BeanUtil.getAllField(clazz); |
|
|
|
|
Map<String, Object> clazzMap = new HashMap<>(fieldsList.size()); |
|
|
|
|
Iterator<Field> fieldsIterator = fieldsList.iterator(); |
|
|
|
|
while (fieldsIterator.hasNext()) { |
|
|
|
|
Field f = fieldsIterator.next(); |
|
|
|
|
clazzMap.put(BeanSqlUtil.caseToHump(f.getName()), f); |
|
|
|
|
} |
|
|
|
|
List<Column> columnList = table.getColumns(); |
|
|
|
|
fieldsList.forEach(field -> { |
|
|
|
|
clazzMap.put(BeanSqlUtil.caseToHump(field.getName()), field); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
List<Column> columnList = table.getColumns(); |
|
|
|
|
Iterator<Column> columnIterator = columnList.iterator(); |
|
|
|
|
while (columnIterator.hasNext()) { |
|
|
|
|
Column column = columnIterator.next(); |
|
|
|
@ -62,24 +64,22 @@ public class MysqlBuilder extends AbstractDbBuiler { |
|
|
|
|
clazzMap.remove(column.getColumnName()); |
|
|
|
|
columnIterator.remove(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
columnIterator = columnList.iterator(); |
|
|
|
|
while (columnIterator.hasNext()) { |
|
|
|
|
Column column = columnIterator.next(); |
|
|
|
|
columnList.forEach(column -> { |
|
|
|
|
sql.append("ALTER TABLE " + table.getTableName() + " DROP COLUMN " + column.getColumnName() + ";"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (String key : clazzMap.keySet()) { |
|
|
|
|
}); |
|
|
|
|
Set<String> keySet = clazzMap.keySet(); |
|
|
|
|
keySet.forEach(key->{ |
|
|
|
|
Field f = (Field) clazzMap.get(key); |
|
|
|
|
String column = BeanSqlUtil.caseToHump(f.getName()); |
|
|
|
|
String columnType = dataTypeMap.get(f.getGenericType().toString()); |
|
|
|
|
String lengthStr = ""; |
|
|
|
|
if ("varchar".equals(columnType) || "int".equals(columnType)) { |
|
|
|
|
if (DB_TYPE_CHAR.equals(columnType) || DB_TYPE_CHAR.equals(columnType)) { |
|
|
|
|
lengthStr = "(100)"; |
|
|
|
|
} |
|
|
|
|
sql.append("ALTER TABLE " + table.getTableName() + " ADD COLUMN " + column + " " + columnType + lengthStr + ";"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
map.remove(table.getTableName()); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
@ -111,7 +111,7 @@ public class MysqlBuilder extends AbstractDbBuiler { |
|
|
|
|
for (Map<String,String> map:mapList){ |
|
|
|
|
String dataTypeStr = dataTypeMap.get(map.get("fieldType")); |
|
|
|
|
sql.append(BeanSqlUtil.caseToHump(map.get("fieldName"))+" "+dataTypeStr); |
|
|
|
|
if ("varchar".equals(dataTypeStr)||"int".equals(dataTypeStr)){ |
|
|
|
|
if (DB_TYPE_CHAR.equals(dataTypeStr)||DB_TYPE_INT.equals(dataTypeStr)){ |
|
|
|
|
if (map.containsKey("fieldLength")) { |
|
|
|
|
sql.append("("+map.get("fieldLength")+")"); |
|
|
|
|
} |
|
|
|
|