mysql根据列信息和表信息建表
作者:互联网
关于使用mybatis创建mysql数据库的表
使用mybatis创建表
在项目开发中,有时候迫不得已需要为用户开放建表功能(一般情况下是用来方便用户创建模型),所以项目中需要有创建表的功能,这种建表又和hibernate的自动建表不一样,他是通过定义的实体类创建的,我们需要通过用户定义的列名和类型创建,所以我根据一位大佬写的mybatis自动建表写了一个能通过列字段和类型等需要的列内容创建表
大佬自动建表(A.CTable)gitee地址
代码
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的依赖,没有别的.碰到问题就留言,看到会回复的
标签:return,String,import,void,和表,private,mysql,建表,public 来源: https://blog.csdn.net/GXiao49666/article/details/112349594