数据库
首页 > 数据库> > mysql根据列信息和表信息建表

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