mysql根據列資訊和表資訊建表
阿新 • • 發佈:2021-01-08
關於使用mybatis建立mysql資料庫的表
使用mybatis建立表
在專案開發中,有時候迫不得已需要為使用者開放建表功能(一般情況下是用來方便使用者建立模型),所以專案中需要有建立表的功能,這種建表又和hibernate的自動建表不一樣,他是通過定義的實體類建立的,我們需要通過使用者定義的列名和型別建立,所以我根據一位大佬寫的mybatis自動建表寫了一個能通過列欄位和型別等需要的列內容建立表
程式碼
package com.cn.entity; import java.util.List; /** * 用於存放建立表的欄位資訊 * * @author sunchenbin, Spet * @version 2019/07/06 */ public class CreateTableParam implements Cloneable{ /** * 欄位名 */ private String fieldName; /** * 欄位型別 */ private String fieldType; /** * 型別長度 */ private int fieldLength; /** * 型別小數長度 */ private int fieldDecimalLength; /** * 欄位是否非空 */ private boolean fieldIsNull; /** * 欄位是否是主鍵 */ private boolean fieldIsKey; /** * 主鍵是否自增 */ private boolean fieldIsAutoIncrement; /** * 欄位預設值 */ private String fieldDefaultValue; /** * 該型別需要幾個長度(例如,需要小數位數的,那麼總長度和小數長度就是2個長度)一版只有0、1、2三個可選值,自動從配置的型別中獲取的 */ private int fileTypeLength; /** * 值是否唯一 */ private boolean fieldIsUnique; /** * 索引名稱 */ private String filedIndexName; /** * 所有欄位列表 */ private List<String> filedIndexValue; /** * 唯一約束名稱 */ private String filedUniqueName; /** * 唯一約束列表 */ private List<String> filedUniqueValue; /** * 欄位的備註 */ private String fieldComment; public String getFieldName() { return fieldName; } public void setFieldName(String fieldName) { this.fieldName = fieldName; } public String getFieldType() { return fieldType; } public void setFieldType(String fieldType) { this.fieldType = fieldType; } public int getFieldLength() { return fieldLength; } public void setFieldLength(int fieldLength) { this.fieldLength = fieldLength; } public int getFieldDecimalLength() { return fieldDecimalLength; } public void setFieldDecimalLength(int fieldDecimalLength) { this.fieldDecimalLength = fieldDecimalLength; } public boolean isFieldIsNull() { return fieldIsNull; } public void setFieldIsNull(boolean fieldIsNull) { this.fieldIsNull = fieldIsNull; } public boolean isFieldIsKey() { return fieldIsKey; } public void setFieldIsKey(boolean fieldIsKey) { this.fieldIsKey = fieldIsKey; } public boolean isFieldIsAutoIncrement() { return fieldIsAutoIncrement; } public void setFieldIsAutoIncrement(boolean fieldIsAutoIncrement) { this.fieldIsAutoIncrement = fieldIsAutoIncrement; } public String getFieldDefaultValue() { return fieldDefaultValue; } public void setFieldDefaultValue(String fieldDefaultValue) { this.fieldDefaultValue = fieldDefaultValue; } public int getFileTypeLength() { return fileTypeLength; } public void setFileTypeLength(int fileTypeLength) { this.fileTypeLength = fileTypeLength; } public boolean isFieldIsUnique() { return fieldIsUnique; } public void setFieldIsUnique(boolean fieldIsUnique) { this.fieldIsUnique = fieldIsUnique; } public String getFiledIndexName() { return filedIndexName; } public void setFiledIndexName(String filedIndexName) { this.filedIndexName = filedIndexName; } public List<String> getFiledIndexValue() { return filedIndexValue; } public void setFiledIndexValue(List<String> filedIndexValue) { this.filedIndexValue = filedIndexValue; } public String getFiledUniqueName() { return filedUniqueName; } public void setFiledUniqueName(String filedUniqueName) { this.filedUniqueName = filedUniqueName; } public List<String> getFiledUniqueValue() { return filedUniqueValue; } public void setFiledUniqueValue(List<String> filedUniqueValue) { this.filedUniqueValue = filedUniqueValue; } public String getFieldComment() { return fieldComment; } public void setFieldComment(String fieldComment) { this.fieldComment = fieldComment; } @Override public CreateTableParam clone() { CreateTableParam createTableParam = null; try { createTableParam = (CreateTableParam) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return createTableParam; } }
package com.cn.entity; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class TableConfig { /** * */ private List<CreateTableParam> list = new ArrayList<>(); private Map<String,String> map = new HashMap<String, String>(); public TableConfig(List<CreateTableParam> list, Map<String, String> map) { if (list != null){ this.list = list; } if(map != null){ this.map = map; } } public TableConfig() { if (list != null){ this.list = list; } } public TableConfig(Map<String, String> map) { this.map = map; } public Map<String, String> getMap() { return map; } public void setMap(Map<String, String> map) { this.map = map; } public List<CreateTableParam> getList() { return list; } public void setList(List<CreateTableParam> list) { this.list = list; } }
package com.cn.dao; import com.cn.entity.TableConfig; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; import java.util.Map; import java.util.Set; /** * 建立更新表結構的Mapper * @author sunchenbin * */ public interface CreateMysqlTablesMapper { /** * 根據結構註解解析出來的資訊建立表 * @param tableMap 表結構的map * map[{ * 表名:{[/filed屬性/{},{},{},{},{}]:{屬性名:屬性值}} * * }] * * */ public void createTable(@Param("tableMap") Map<String, TableConfig> tableMap); }
package com.cn.utils;
import com.alibaba.druid.util.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* @program: autoCreatTable
* @description: 通過一個table_comment來建立一個tableConfig的Map
* @author: GuoX
* @create: 2020-12-09 09:57
**/
public class TableConfigUtil {
public static Map<String,Object> getDefaultTableMap(String comment){
Map<String,Object> configMap = new HashMap<>();
configMap.put("table_comment",comment);
configMap.put("table_collation","UTF8");
configMap.put("engine","InnoDB");
return configMap;
}
public static Map<String,Object> getTableMapByParam(String comment,String collation,String engine){
Map<String,Object> configMap = new HashMap<>();
configMap.put("table_comment",comment);
if(StringUtils.isEmpty(collation)){
configMap.put("table_collation","UTF8");
}else {
configMap.put("table_collation",collation);
}
if(StringUtils.isEmpty(engine)){
configMap.put("engine","InnoDB");
}else {
configMap.put("engine",engine);
}
configMap.put("engine",engine);
return configMap;
}
}
前臺
前臺的form根據自己所需要的內容,CreateTableParam 和TableConfig兩個實體類的引數去寫
總結
由於這些主要都是copy的A.CTable的,所以自己的程式碼並不多,也沒有考慮效率問題,所以也就是能用的程度.需要的依賴就是正常使用ssm的依賴,沒有別的.碰到問題就留言,看到會回覆的