MybatisPlus根据实体类生成sql

package com.aunt.utils;

import com.aunt.bean.entity.LogUser;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.google.common.collect.Lists;
import net.bytebuddy.description.annotation.AnnotationDescription;
import org.apache.commons.lang3.StringUtils;

import javax.xml.bind.annotation.XmlElement;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.*;

/**
 * 通过实体类生成建表语句
 */
public class GenerateSqlFromEntity2 {
    //
    private static Map<String, String> javaTypeCast = new HashMap<>();
    private static Map<String, String> filedMap;
    private static String symbol;
    private static String space;


    static {
        space = "\n";
        symbol = ",";
        filedMap = new HashMap<>();
        javaTypeCast.put("Integer", "INTEGER");
        javaTypeCast.put("Short", "tinyint");
        javaTypeCast.put("Long", "bigint");
        javaTypeCast.put("BigDecimal", "decimal(19,2)");
        javaTypeCast.put("Double", "double precision not null");
        javaTypeCast.put("Float", "float");
        javaTypeCast.put("Boolean", "bit");
        javaTypeCast.put("Timestamp", "datetime");
        javaTypeCast.put("String", "VARCHAR(255)");
        javaTypeCast.put("Date", "datetime");
    }

    //
    public static String createTable(Class clazz) throws IOException {

        Field[] fields = null;
        fields = clazz.getDeclaredFields();
        String param = null;
        String column = null;
        Class annotationType = null;
        XmlElement xmlElement = null;
        TableName annotation = (TableName) clazz.getAnnotation(TableName.class);
        StringBuilder stb = new StringBuilder(50);
        String tableName = annotation.value();
        if (tableName == null || tableName.equals("")) {
            // 未传表明默认用类名
            tableName = clazz.getName();
            tableName = tableName.substring(tableName.lastIndexOf(".") + 1);
        }

        stb.append("create table ").append(tableName).append(" (\r\n");
        Map<String, String> map = getAnnoValue(clazz);
        ArrayList<Object> counter = Lists.newArrayList();

        map.entrySet().stream().forEach(op -> {
            counter.add(op.getKey());
            symbol = counter.size() - 1 == map.entrySet().size() - 1 ? "" : symbol;
            stb.append(op.getKey() + " " + javaTypeCast.get(op.getValue()).concat(symbol));
            stb.append("\r\n");

        });

        String sql = null;
        sql = stb.toString();

        // 去掉最后一个逗号
        int lastIndex = sql.lastIndexOf(",");
        sql = sql.substring(0, lastIndex) + sql.substring(lastIndex + 1);
        sql = sql.substring(0, sql.length() - 1)
                + ") ENGINE = INNODB DEFAULT  CHARSET= utf8;\r\n";

        return sql;
    }

    // main
    public static void main(String[] args) throws IOException {
        System.err.println(createTable(LogUser.class));
//        getAnnoValue(LogUser.class);
    }


    /**
     * 获取注解上的值 以及参数的类型
     *
     * @param clazz 目标
     * @return
     */
    public static Map<String, String> getAnnoValue(Class clazz) {
        List<Field> fields = Arrays.asList(clazz.getDeclaredFields());
        fields.stream().forEach(opt -> {
                    String value;
                    String name = null;
                    name = opt.getType().getName();
                    name = name.substring(10, name.length());
                    TableId tableId = opt.getAnnotation(TableId.class);
                    if (tableId == null) {
                        TableField tableField = opt.getAnnotation(TableField.class);
                        value = tableField.value();
                    } else {
                        value = opt.getName();
                    }
                    filedMap.put(value, name);
                }
        );
        return filedMap;
    }
}

最后效果

create table t_user (
birthday VARCHAR(255),
last_login_time bigint,
city VARCHAR(255),
sex VARCHAR(255),
del INTEGER,
register_time bigint,
password VARCHAR(255),
province VARCHAR(255),
phone VARCHAR(255),
idcard VARCHAR(255),
nickname VARCHAR(255),
id VARCHAR(255),
email VARCHAR(255)
) ENGINE = INNODB DEFAULT  CHARSET= utf8;

简单的demo

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值