实体类创建数据库字段

package top.zjtie.qingningmaicai3;

import com.google.common.collect.Lists;
import top.zjtie.qingningmaicai3.entity.*;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author QianJiajie
 * @date 2020-11-07 15:20
 */
public class DaoGenUtils {
    public static void genParam(List<String> params) {
        StringBuilder sb = new StringBuilder();
        StringBuilder sb1 = new StringBuilder();
        sb1.append(" where ");
        for (String p : params) {
            sb.append("@Param(" + p + ") " + p + ",");
            sb1.append(p + " = #{" + p + "} and ");
        }
        System.out.println(sb);
        System.out.println(sb1);
    }

    public static void genDataSchema(Class clazz) {

        if (clazz == null) {
            return;
        }
        String tableName = "Green_" + clazz.getSimpleName().substring(5);
        //获取关联的所有类,本类以及所有父类
        boolean ret = true;
        List<Class> clazzs = new ArrayList<Class>();
        //需要关联父类时候打开这个注释
        while (ret) {
            clazzs.add(clazz);
            clazz = clazz.getSuperclass();
            if (clazz == null || clazz == Object.class) {
                break;
            }
        }
        StringBuilder sb = new StringBuilder();
        sb.append("CREATE TABLE `" + tableName + "` (\n");


        for (int i = 0; i < clazzs.size(); i++) {
            Field[] declaredFields = clazzs.get(i).getDeclaredFields();
            List<Field> declaredFieldsList = Lists.newArrayList(declaredFields);
            declaredFieldsList = declaredFieldsList.stream()
                    .collect(Collectors.toList());

            Field[] fields = declaredFieldsList.toArray(new Field[0]);
            int length = fields.length;
            for (int j = 0; j < length; j++) {
                Field field = fields[j];
                int mod = field.getModifiers();
                //过滤 static 和 final 类型
                if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
                    continue;
                }
                field.setAccessible(true);
                String fieldName = field.getName();
                String schemaStr = "`" + fieldName + "` " + getSchemaType(field) + " \n";
                if (j == length-1){
                    schemaStr = schemaStr.replace(",", "");
                }
                sb.append("  " +schemaStr);

            }
        }
        sb.append(") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;\n");
        System.out.println(sb);
    }

    private static String getSchemaType(Field field) {

        Class<?> fieldType = field.getType();
        if (fieldType == String.class) {
            return "VARCHAR(50) NOT NULL,";
        } else if (fieldType == Double.class || fieldType == double.class || fieldType == BigDecimal.class) {
            return "BIGDECIMAL(10,2) NOT NULL,";
        } else if (fieldType == Integer.class || fieldType == int.class) {
            if (field.getName().toLowerCase().contains("type") || field.getName().toLowerCase().contains("status")) {
                return "TINYINT(4) NOT NULL,";
            } else {
                return "INT(11) NOT NULL,";
            }
        } else if (fieldType == Date.class) {
            if (field.getName().contains("add")) {
                return "timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,";
            } else if (field.getName().contains("update")) {
                return "timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,";
            }
            return "timestamp,";
        }
        return "VARCHAR(50) NOT NULL,";
    }

    public static void main(String[] args) {
        //genParam(Lists.newArrayList("orderId", "ticketAmount", "speedPackAmount", "convertStatus", "realTicketGroupId", "failType"));
        genDataSchema(GreenAds.class);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃醋的工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值