MyBatis动态自定义创建表

MyBatis动态自定义创建表_第1张图片

1.MyBatis通过接口调用自定义创建数据表
实例代码:

<update id="createCustomTable" parameterType="com.rabbitmq.mq.entity.CreateTableAndTabbleName">
         CREATE TABLE IF NOT EXISTS  ${tableName} (
          `id` int NOT NULL AUTO_INCREMENT COMMENT '编号',
            <foreach collection="customTables" item="item" separator="">
                <if test="item.choose == true">
                    ${item.createTableFiledName} ${item.fieldType}
                    <choose>
                        <when test="item.isNotNull != null and item.isNotNull !=''">
                            NOT NULL
                        </when>
                    </choose>
                    DEFAULT
                    <choose>
                        <when test="item.defaultValue != null and item.defaultValue !=''">
                            ${item.defaultValue}
                        </when>
                        <otherwise>
                            NULL
                        </otherwise>
                    </choose>
                    COMMENT
                    <choose>
                        <when test="item.comment != null and item.comment !=''">
                            '${item.comment}'
                        </when>
                        <otherwise>
                            '${item.createTableFiledName}'
                        </otherwise>
                    </choose>
                    ,
                </if>
            </foreach>
          PRIMARY KEY (`id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
  </update>

2.接口调用参数实例:

URL:localhost:8080/createCustomTable
requestMethods: Post
body:
{
    "tableName":"custom_table_1",
    "customTables":[{
                        "createTableFiledName":"creater",
                        "fieldType":"varchar(255)",
                        "comment":"创建者",
                        "choose":true
                    },{
                        "createTableFiledName":"create_time",
                        "fieldType":"timestamp",
                        "defaultValue":"CURRENT_TIMESTAMP",
                        "isNotNull":true,
                        "comment":"创建时间",
                        "choose":true
                    },{
                        "createTableFiledName":"updater",
                        "fieldType":"varchar(255)",
                        "comment":"更新者",
                        "choose":true
                    },{
                        "createTableFiledName":"update_time",
                        "fieldType":"timestamp",
                        "defaultValue":"CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP",
                        "isNotNull":true,
                        "comment":"更新时间",
                        "choose":true
                    },{
                        "createTableFiledName":"is_delete",
                        "fieldType":"tinyint(1)",
                        "defaultValue":0,
                        "comment":"是否删除",
                        "choose":true
                    },{
                        "createTableFiledName":"ip",
                        "fieldType":"varchar(64)",
                        "comment":"IP地址",
                        "choose":false
                    },{
                        "createTableFiledName":"operation",
                        "fieldType":"varchar(50)",
                        "comment":"用户操作",
                        "choose":false
                    }]
}

3.实体类对于参数说明
CreateTableAndTabbleName 和 CustomTable

`1`
public class CreateTableAndTabbleName {
    private String tableName;
    private List<CustomTable> customTables;

    public String getTableName() {
        return tableName;
    }

    public void setTableName(String tableName) {
        this.tableName = tableName;
    }

    public List<CustomTable> getCustomTables() {
        return customTables;
    }

    public void setCustomTables(List<CustomTable> customTables) {
        this.customTables = customTables;
    }
}

`2`

public class CustomTable {
    /*外部数据字段*/
    private String externalDataField;
    /*是否为空*/
    private  boolean isNotNull;
    /*默认值*/
    private String defaultValue;
    /*评论*/
    private String comment;
    /*建表数据字段*/
    private String createTableFiledName;
    /*字段类型*/
    private String fieldType;
    /*字段长度*/
    private  int lengthLimit;
    /*选择,choose如果为true说明是可添加*/
    private boolean choose;

    public String getExternalDataField() {
        return externalDataField;
    }

    public void setExternalDataField(String externalDataField) {
        this.externalDataField = externalDataField;
    }

    public boolean isNotNull() {
        return isNotNull;
    }

    public void setNotNull(boolean notNull) {
        isNotNull = notNull;
    }

    public String getDefaultValue() {
        return defaultValue;
    }

    public void setDefaultValue(String defaultValue) {
        this.defaultValue = defaultValue;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    public String getCreateTableFiledName() {
        return createTableFiledName;
    }

    public void setCreateTableFiledName(String createTableFiledName) {
        this.createTableFiledName = createTableFiledName;
    }

    public String getFieldType() {
        return fieldType;
    }

    public void setFieldType(String fieldType) {
        this.fieldType = fieldType;
    }

    public int getLengthLimit() {
        return lengthLimit;
    }

    public void setLengthLimit(int lengthLimit) {
        this.lengthLimit = lengthLimit;
    }

    public boolean isChoose() {
        return choose;
    }

    public void setChoose(boolean choose) {
        this.choose = choose;
    }
}

//可添加 外键等操作
//添加外键 alter table 【tableName】 add constraint 【FK】 foreign key(【filed】) REFERENCES 【REFERENCEStable】(【REFERENCESfield】)
//查看表结构desc custom_table_1;
//查看所有表 show tables;

你可能感兴趣的:(Java,mybatis)