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
- Java 反射由实体类生产hive或mysql表对应字段
- maven反向生产对应的实体类
- java mysql 对应字段
- mysql字段类型对应java类
- hibernate配置文件实体类,对应表中字段类型错误
- mySql字段类型对应java字段类型表
- 快速创建和mysql表对应的java domain实体类
- 快速创建和mysql表对应的java domain实体类 .
- 利用java 反射将DTO类中的属性值更新到对应的实体类中
- JAVA 反射获得object对象对应的实体类的属性、及属性值
- JAVA 反射获得object对象对应的实体类的属性、及属性值
- 替换map的key并通过反射给实体类赋值(做接口或对比字段常用到)
- java中使用反射获取pojo(实体)类的所有字段值
- java中使用反射获取pojo(实体)类的所有字段值
- MySql与JAVA字段类型对应
- mysql 字段类型对应 java属性类型
- Hibernate—根据实体类得到对应的表名、主键名、字段名
- Hibernate—根据实体类得到对应的表名、主键名、字段名
- JSP开发过程遇到的中文乱码问题及解决方案
- Xcode的警告、错误的解决办法
- 浏览器兼容性:Firefox和IE中的textContent和text
- Android开发编码规范
- SQL Server 2008 R2英文版安装图文教程(中文版安装同理)
- Java 反射由实体类生产hive或mysql表对应字段
- Spring MVC 教程,快速入门,深入分析
- 算法分析与设计实验一 分治策略
- 【翻译】用正确的方法改变图片大小(Resize a UIImage the right way)
- 20150403
- ubuntu 下创建加密文件夹
- 总结C++中的所有强制转换函数(const_cast,reinterpret_cast,static_cast,dynamic_cast)
- fstat、stat和lstat用法
- 4月2日毕设日记