通过JAVA反射实现,实体类转换Mysql数据库表结构[精简版]


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;


/**
 * 实体类转换Mysql数据库表结构[精简版]
 * @version  2019-05-15
 */
public class ReflectionUtilTest {
    static class  User{
        private int id;
        private String userName;
        private String userPass;
        private Date createDate;
    }

    public static void main(String[] ages){
        String tableName = "user";
        StringBuffer stringBuffer = new StringBuffer ();
        List<Field> fields = getFields (User.class);
        stringBuffer.append ("CREATE TABLE `"+tableName+"` (");
        for (Field field : fields) {

            if (!Modifier.isStatic (field.getModifiers ()) && !"currentUser".equals (field.getName ())){
                stringBuffer.append ("\n").append (getName(field.getName ())+" ");
                stringBuffer.append (getMysqlColunmType (field.getType ()));
                stringBuffer.append (" NULL DEFAULT NULL ,");
            }
        }
        stringBuffer.delete (stringBuffer.length ()-1,stringBuffer.length ());
        stringBuffer.append ("\n").append (")ENGINE=InnoDB\n" +
                "DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci ;");

        System.out.println (stringBuffer);

    }


    /**
     * 获取所有字段
     * @param cls   实体类Class
     * @return
     */
    public  static List<Field> getFields(Class<?> cls){
        List<Field> fields = new ArrayList<> ();
        if (cls == Object.class){
            return  new ArrayList<> ();
        }
        fields.addAll (getFields (cls.getSuperclass ()));
        Field[] declaredFields = cls.getDeclaredFields ();
        for (Field declaredField : declaredFields) {
            fields.add (declaredField);
        }
        return  fields;
    }

    /**
     * 获取Mysql列属性
     * 有需要自己添加哟
     * @param cls
     * @return
     */
    public static String getMysqlColunmType(Class cls){
        String clsName = cls.toString ();
        if (cls == Date.class){
            return  "datetime";
        }
        if (cls == BigDecimal.class){
            return  "decimal(12,2)";
        }
        if (cls == Integer.class||cls == Long.class || clsName.equals ("int") || clsName.equals ("long")){
            return  "int";
        }
        return "varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci ";
    }

    /**
     * 获取属性名称转换数据库列明
     * 驼峰转换
     * @param name
     * @return
     */
    private  static String getName(String name){
        StringBuffer stringBuffer = new StringBuffer ();
        for (char c : name.toCharArray ()) {
            if (Character.isUpperCase (c)){
                stringBuffer.append ("_");
                stringBuffer.append (Character.toLowerCase (c));
            }else{
                stringBuffer.append (c);
            }
        }
        return stringBuffer.toString ();
    }


}

程序截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值