1. 程式人生 > 資料庫 >mysql根據列資訊和表資訊建表

mysql根據列資訊和表資訊建表

關於使用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的依賴,沒有別的.碰到問題就留言,看到會回覆的