活很少說,亮出代碼:java
註解定義:ide
package org.sorpio.gen; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Documented @Inherited @Retention(RetentionPolicy.RUNTIME) // 此註解做用於字段上 @Target(ElementType.FIELD) public @interface Value { String value(); }
獲取properties文件內容工具
package org.sorpio.gen.util; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Properties; /** * 獲取properties文件的值 * @author Li Enbo * @date 2017年11月22日下午1:44:28 */ public class PropertiesUtils { /** * 獲取properties文件的值 * * @param key * @return value */ public static String getValue(String key) { String fileNamePath = "src/main/resources/config.properties"; Properties props = new Properties(); InputStream in = null; try { in = new FileInputStream(fileNamePath); // prop.load(in); 直接這麼寫,若是properties文件中有中文漢字,則漢字會亂碼。由於未設置編碼格式。 props.load(new InputStreamReader(in, "utf-8")); if (key == null || "".equals(key)) { throw new NullPointerException("key值爲空"); } String value = props.getProperty(key); return value; } catch (IOException e) { e.printStackTrace(); return null; } finally { if (null != in) try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } }
爲實例對象設值 ui
package org.sorpio.gen.util; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Objects; import org.sorpio.gen.Value; /** * 獲取爲對象設置的值工具類 * * @author Li Enbo * @date 2017年11月22日下午1:42:47 */ public class ValueUtils { /** * * @param obj * @throws Exception */ public static void getValue(Object obj) throws Exception { Class<?> clz = obj.getClass(); // 解析字段上是否有註解 Field[] fields = clz.getDeclaredFields(); for (Field field : fields) { boolean fieldHasAnno = field.isAnnotationPresent(Value.class); if (fieldHasAnno) { Value valueAnnoation = field.getAnnotation(Value.class); // 獲取註解的值 String value = valueAnnoation.value(); // 經過註解設置的值獲取properties的值 String propertiedValue = Objects.requireNonNull(PropertiesUtils.getValue(value)); // 獲取屬性的名字 String name = field.getName(); // 將屬性的首字符大寫, 構造get,set方法 name = name.substring(0, 1).toUpperCase() + name.substring(1); // 獲取屬性的類型 String type = field.getGenericType().toString(); // 若是type是類類型,則前面包含"class ",後面跟類名 // String 類型 if (type.equals("class java.lang.String")) { Method m = clz.getMethod("set" + name, String.class); // invoke方法傳遞實例對象,由於要對實例處理,而不是類 m.invoke(obj, propertiedValue); } // int Integer類型 if (type.equals("class java.lang.Integer")) { Method m = clz.getMethod("set" + name, Integer.class); m.invoke(obj, Integer.parseInt(propertiedValue)); } if (type.equals("int")) { Method m = clz.getMethod("set" + name, int.class); m.invoke(obj, (int) Integer.parseInt(propertiedValue)); } // boolean Boolean類型 if (type.equals("class java.lang.Boolean")) { Method m = clz.getMethod("set" + name, Boolean.class); if (propertiedValue.equalsIgnoreCase("true")) { m.invoke(obj, true); } if (propertiedValue.equalsIgnoreCase("false")) { m.invoke(obj, true); } } if (type.equals("boolean")) { Method m = clz.getMethod("set" + name, boolean.class); if (propertiedValue.equalsIgnoreCase("true")) { m.invoke(obj, true); } if (propertiedValue.equalsIgnoreCase("false")) { m.invoke(obj, true); } } // long Long 數據類型 if (type.equals("class java.lang.Long")) { Method m = clz.getMethod("set" + name, Long.class); m.invoke(obj, Long.parseLong(propertiedValue)); } if (type.equals("long")) { Method m = clz.getMethod("set" + name, long.class); m.invoke(obj, Long.parseLong(propertiedValue)); } // 時間數據類型 if (type.equals("class java.util.Date")) { Method m = clz.getMethod("set" + name, java.util.Date.class); m.invoke(obj, DataConverter.convert(propertiedValue)); } } } } }
時間格式轉換器this
package org.sorpio.gen.util; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; public class DataConverter { private static final List<String> formarts = new ArrayList<String>(4); static { formarts.add("yyyy-MM"); formarts.add("yyyy-MM-dd"); formarts.add("yyyy-MM-dd hh:mm"); formarts.add("yyyy-MM-dd hh:mm:ss"); } public static Date convert(String source) { String value = source.trim(); if ("".equals(value)) { return null; } if (source.matches("^\\d{4}-\\d{1,2}$")) { return parseDate(source, formarts.get(0)); } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) { return parseDate(source, formarts.get(1)); } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) { return parseDate(source, formarts.get(2)); } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) { return parseDate(source, formarts.get(3)); } else { throw new IllegalArgumentException("Invalid boolean value '" + source + "'"); } } /** * 功能描述:格式化日期 * * @param dateStr * String 字符型日期 * @param format * String 格式 * @return Date 日期 */ public static Date parseDate(String dateStr, String format) { Date date = null; try { DateFormat dateFormat = new SimpleDateFormat(format); date = (Date) dateFormat.parse(dateStr); } catch (Exception e) { } return date; } }
properties文件 編碼
name=lien6o age=24 addr=北京市海淀區 date=2016-11-11 12:6:20
User類code
package org.sorpio.gen; import java.util.Date; /** * <p> * Title:User * </p> * <p> * Description: * </p> * <p> * Company: * </p> * * @author Li Enbo * @date 2017年11月22日上午9:12:03 */ public class User { @Value("name") private String name; @Value("age") private int age; @Value("addr") private String addr; @Value("date") private Date date; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } @Override public String toString() { return "User [name=" + name + ", age=" + age + ", addr=" + addr + ", date=" + date + "]"; } }
控制檯orm