Java 反射由实体类生产hive或mysql表对应字段

来源:互联网 发布:15度倒角怎么编程 编辑:程序博客网 时间:2024/06/05 06:25

如果一个实体类字段特别多,那么创建对应的RDBMS对应的表会让我感到抓狂,可以利用Java反射特性,生产对应字段
1.创建一个借口,定义一些常量

public interface Constants {    /**参数默认值*/    public static final String DEFAULT_PARAM_VAL = "";    /**中文字符集*/    public static final String CHAR_UTF8 = "utf-8";    /**数据默认分隔符*/    public static final String DEFAULT_SEPAREATOR = "|";    /**字段默认分隔符*/    public static final String DEFAULT_FIELDS_SEPAREATOR = ",";    /**空格字符串*/    public static final String BLANK_SPACE = " ";    /**换行字符*/    public static final String LINE_FEED = "\n";    /**制表符字符*/    public static final String TAB = "\t";}

2.创建一个枚举类,定义一些常用语句 (可以根据,你自己的需求定义)

/** *  * @author puppy * @data 2015-04-02 * */public enum HiveTableSyntax {    external("CREATE EXTERNAL TABLE ","external"),inner("CREATE TABLE ","inner"),    defalut("PARTITIONED BY(logdate String) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' ","default"),    sequence("PARTITIONED BY(logdate String) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS SequenceFile ","sequence");    private String value;    private String index;    private HiveTableSyntax() {    }    private HiveTableSyntax(String value) {        this.value=value;    }    private HiveTableSyntax(String value,String index)      {          this.value=value;        this.index=index;    }      public static String getValue(String index){        for(HiveTableSyntax hts:HiveTableSyntax.values()){            if(hts.getIndex().equalsIgnoreCase(index)){                return hts.getValue();            }        }        return null;    }    public String getValue() {        return value;    }    public void setValue(String value) {        this.value = value;    }    public String getIndex() {        return index;    }    public void setIndex(String index) {        this.index = index;    }}

3.创建生成表的类 (我这里只写了生成hive表,对应其他 请自己定义)

/** *  * @author puppy * @date 2015-04-01 * */public class AutoCreateFields {    // 生成字段    public static String create(Class<?> clazz) {        Field[] fs = clazz.getDeclaredFields();        Class<?> superClazz = clazz.getSuperclass();        if (superClazz != null) {            Field[] superFs = superClazz.getDeclaredFields();            fs = (Field[]) ArrayUtils.addAll(fs, superFs);        }        StringBuffer sb = new StringBuffer();        sb.append(Constants.LINE_FEED);        sb.append("(");        int size = fs.length;        for (int i = 0; i < size; i++) {            Field field = fs[i];            field.setAccessible(true);            sb.append(field.getName());            sb.append(Constants.BLANK_SPACE);            sb.append(field.getType().getSimpleName().equalsIgnoreCase("Integer")?"int":field.getType().getSimpleName());            if (i + 1 != size) {                sb.append(Constants.DEFAULT_FIELDS_SEPAREATOR);                sb.append(Constants.LINE_FEED);            }        }        sb.append(")");        sb.append(Constants.LINE_FEED);        return sb.toString();    }    //生成hive表    public static String createHiveTable(Class<?> clazz,String tblname,String externalOrInner,String storeTpye){        StringBuilder sb=new StringBuilder();        String fields=create(clazz);        String create=HiveTableSyntax.getValue(externalOrInner);        String st=HiveTableSyntax.getValue(storeTpye);        sb.append(create);        sb.append(tblname);        sb.append(fields);        sb.append(st);        return sb.toString();    }    public static void main(String[] args) {        String result="Need Params:aqy or partner or v1 or default";        if(args.length>0&&StringUtils.isNotBlank(args[0])){            String value=args[0];            switch (value){            case "aqy":                result=createHiveTable(AQYLogOriginal.class,"qiyi_log_original","external","sequence");                break;            case "partner":                result=createHiveTable(PartnerLogOriginal.class,"partner_log_original","external","sequence");                break;            case "v1":                result=createHiveTable(V1VodLogOriginal.class,"v1_log_original","external","sequence");                break;                default:                result=createHiveTable(V1VodLogOriginal.class,"v0v1_log_original","external","sequence");                   break;            }        }        //String aqy = createHiveTable(AQYLogOriginal.class,"qiyi_log_original","external","sequence");        //String partner = createHiveTable(PartnerLogOriginal.class,"partner_log_original","external","sequence");        //String v1 = createHiveTable(V1VodLogOriginal.class,"v0v1_log_original","inner","sequence");        System.out.println(result);    }
0 0
原创粉丝点击