根据json生成建表语句_slq_jobs的博客-CSDN博客_在线json转建表语句的工具


package org.linjinyu.generator;


/**
 * @Description: Java类作用描述
 * @Author: linjinyu
 * @CreateDate: 8/12/20 11:04 AM
 * @UpdateUser: linjinyu
 * @UpdateDate: 8/12/20 11:04 AM
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
public class SqlSentence {

    public static String INTEGER     = "java.lang.Integer";
    public static String LONG        = "java.lang.Long";
    public static String STRING      = "java.lang.String";
    public static String JSONOBJECT  = "com.alibaba.fastjson.JSONObject";
    public static String FLOAT       = "java.lang.Float";
    public static String DOUBLE      = "java.lang.Double";
    public static String BIG_DECIMAL = "java.math.BigDecimal";
    public static String DATE        = "java.util.Date";

}


package org.linjinyu.generator;

import lombok.Data;

import java.util.List;

/**
 * @Description: Java类作用描述
 * @Author: linjinyu
 * @CreateDate: 8/12/20 11:05 AM
 * @UpdateUser: linjinyu
 * @UpdateDate: 8/12/20 11:05 AM
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
@Data
public class JsonMetaNode {

    private String             key;
    private String             valueType;
    /**
     * 数据库中的列名
     */
    private String             dbColName;
    private List<JsonMetaNode> children;


    public JsonMetaNode() {
    }

    public JsonMetaNode(String key, String valueType) {
        this.key = key;
        this.valueType = valueType;
    }


}
package org.linjinyu.generator;

import java.util.List;


/**
 * @Description: Java类作用描述
 * @Author: linjinyu
 * @CreateDate: 8/12/20 11:01 AM
 * @UpdateUser: linjinyu
 * @UpdateDate: 8/12/20 11:01 AM
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
public class SqlUtil {

    /**
     * 建表语句
     *
     * @param tableName
     * @param jsonMetaNodeList
     * @return
     */
    public static String createTable(String tableName, List<JsonMetaNode> jsonMetaNodeList) {

        String sqlCreate = "CREATE TABLE " + tableName + "(\n" + getRowName(jsonMetaNodeList);

        return sqlCreate;

    }

    /**
     * 获取建表语句的列名
     *
     * @param jsonMetaNodeList
     * @return
     */
    private static String getRowName(List<JsonMetaNode> jsonMetaNodeList) {

        StringBuffer sqlRowNameBuffer = new StringBuffer();


        for (JsonMetaNode jsonMetaNode : jsonMetaNodeList) {

            String key       = jsonMetaNode.getKey();
            String valueType = jsonMetaNode.getValueType();
            String type      = "";

            if (SqlSentence.INTEGER.equals(valueType)) {
                type = "int(10)";
            } else if (SqlSentence.LONG.equals(valueType)) {
                type = "bigint(20)";
            } else if (SqlSentence.STRING.equals(valueType)) {
                type = "varchar(100)";
            } else if (SqlSentence.BIG_DECIMAL.equals(valueType)) {
                type = "decimal(20,4)";
            } else if (SqlSentence.FLOAT.equals(valueType)) {
                type = "float(100,10)";
            } else if (SqlSentence.DOUBLE.equals(valueType)) {
                type = "double(100,10)";
            } else if (SqlSentence.DATE.equals(valueType)) {
                type = "datetime";
            } else {
                type = "varchar(100)";
            }

            sqlRowNameBuffer.append(key).append(" ").append(type).append(" ").append("CHARACTER SET utf8 NULL ,");

        }
        sqlRowNameBuffer.deleteCharAt(sqlRowNameBuffer.length() - 1);
        sqlRowNameBuffer.append(")");
        String sqlRowName = sqlRowNameBuffer.toString();
        return sqlRowName;
    }
}
package org.linjinyu.generator;


import cn.hutool.core.io.file.FileReader;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/**
 * @Description: 能运行, 但还是差很多
 * @Author: linjinyu
 * @CreateDate: 8/12/20 11:02 AM
 * @UpdateUser: linjinyu
 * @UpdateDate: 8/12/20 11:02 AM
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
@Slf4j
public class JsonTest {


    public void generatorFromJavaBean() throws IOException {

    }

    @Test
    public void generatorFromJson() throws IOException {


        List<JsonMetaNode> jsonMetaNodeList = new ArrayList<>();

        /** **************************************** 读取json **************************************** **/



        // 默认UTF-8编码,可以在构造中传入第二个参数做为编码
        FileReader fileReader = new FileReader("/run/media/linjinyu/NTFS/JAVA_HOME/workspace_superdesk/superdesk-uniorder-ex/superdesk-uniorder-ex-patch/src/test/java/org/linjinyu/generator/test001.json");

        String jsonStr = fileReader.readString();

        /** **************************************** 读取json **************************************** **/

        // 转换成json对象
        JSONObject jsonObject = (JSONObject) JSON.parse(jsonStr);

        Set<String> strings = jsonObject.keySet();

        Iterator<String> iterator = strings.iterator();
        // 遍历json对象,根据key获取value并获取value的类型
        while (iterator.hasNext()) {

            JsonMetaNode jsonMete = new JsonMetaNode();
            String       next     = iterator.next();
            jsonMete.setKey(next);
            Object o    = jsonObject.get(next);
            String name = o.getClass().getName();
            jsonMete.setValueType(name);

            jsonMetaNodeList.add(jsonMete);

        }

        // 调用建表语句的方法
        String sqlCreateTable = SqlUtil.createTable("sql_test", jsonMetaNodeList);

        System.out.println(sqlCreateTable);

    }


}

Original url: Access
Created at: 2020-08-12 10:31:33
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论