BeanRefUtil.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. package cn.com.lzt.common.util;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.Method;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Date;
  6. import java.util.HashMap;
  7. import java.util.Locale;
  8. import java.util.Map;
  9. /**
  10. * java bean 反射的方法
  11. */
  12. public class BeanRefUtil {
  13. /**
  14. * 取Bean的属性和值对应关系的MAP
  15. * @param bean
  16. * @return Map
  17. */
  18. public static Map<String, Object> getFieldValueMap(Object bean) {
  19. Class<?> cls = bean.getClass();
  20. Map<String, Object> valueMap = new HashMap<String, Object>();
  21. // 取出bean里的所有方法
  22. Method[] methods = cls.getDeclaredMethods();
  23. Field[] fields = cls.getDeclaredFields();
  24. for (Field field : fields) {
  25. try {
  26. // String fieldType = field.getType().getSimpleName();
  27. String fieldGetName = parGetName(field.getName());
  28. if (!checkGetMet(methods, fieldGetName)) {
  29. continue;
  30. }
  31. Method fieldGetMet = cls
  32. .getMethod(fieldGetName, new Class[] {});
  33. Object fieldVal = fieldGetMet.invoke(bean, new Object[] {});
  34. // String result = null;
  35. // if ("Date".equals(fieldType)) {
  36. // result = fmtDate((Date) fieldVal);
  37. // } else {
  38. // if (null != fieldVal) {
  39. // result = String.valueOf(fieldVal);
  40. // }
  41. // }
  42. valueMap.put(field.getName(), fieldVal);
  43. } catch (Exception e) {
  44. continue;
  45. }
  46. }
  47. return valueMap;
  48. }
  49. /**
  50. * set属性的值到Bean
  51. * @param bean
  52. * @param valMap
  53. */
  54. public static void setFieldValue(Object bean, Map<String, String> valMap) {
  55. Class<?> cls = bean.getClass();
  56. // 取出bean里的所有方法
  57. Method[] methods = cls.getDeclaredMethods();
  58. Field[] fields = cls.getDeclaredFields();
  59. for (Field field : fields) {
  60. try {
  61. String fieldSetName = parSetName(field.getName());
  62. if (!checkSetMet(methods, fieldSetName)) {
  63. continue;
  64. }
  65. Method fieldSetMet = cls.getMethod(fieldSetName, field
  66. .getType());
  67. String value = valMap.get(field.getName());
  68. if (null != value && !"".equals(value)) {
  69. String fieldType = field.getType().getSimpleName();
  70. if ("String".equals(fieldType)) {
  71. fieldSetMet.invoke(bean, value);
  72. } else if ("Date".equals(fieldType)) {
  73. Date temp = parseDate(value);
  74. fieldSetMet.invoke(bean, temp);
  75. } else if ("Integer".equals(fieldType)
  76. || "int".equals(fieldType)) {
  77. Integer intval = Integer.parseInt(value);
  78. fieldSetMet.invoke(bean, intval);
  79. } else if ("Long".equalsIgnoreCase(fieldType)) {
  80. Long temp = Long.parseLong(value);
  81. fieldSetMet.invoke(bean, temp);
  82. } else if ("Double".equalsIgnoreCase(fieldType)) {
  83. Double temp = Double.parseDouble(value);
  84. fieldSetMet.invoke(bean, temp);
  85. } else if ("Boolean".equalsIgnoreCase(fieldType)) {
  86. Boolean temp = Boolean.parseBoolean(value);
  87. fieldSetMet.invoke(bean, temp);
  88. } else {
  89. System.out.println("not supper type" + fieldType);
  90. }
  91. }
  92. } catch (Exception e) {
  93. continue;
  94. }
  95. }
  96. }
  97. /**
  98. * 格式化string为Date
  99. * @param datestr
  100. * @return date
  101. */
  102. public static Date parseDate(String datestr) {
  103. if (null == datestr || "".equals(datestr)) {
  104. return null;
  105. }
  106. try {
  107. String fmtstr = null;
  108. if (datestr.indexOf(':') > 0) {
  109. fmtstr = "yyyy-MM-dd HH:mm:ss";
  110. } else {
  111. fmtstr = "yyyy-MM-dd";
  112. }
  113. SimpleDateFormat sdf = new SimpleDateFormat(fmtstr, Locale.UK);
  114. return sdf.parse(datestr);
  115. } catch (Exception e) {
  116. return null;
  117. }
  118. }
  119. /**
  120. * 日期转化为String
  121. * @param date
  122. * @return date string
  123. */
  124. public static String fmtDate(Date date) {
  125. if (null == date) {
  126. return null;
  127. }
  128. try {
  129. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
  130. Locale.US);
  131. return sdf.format(date);
  132. } catch (Exception e) {
  133. return null;
  134. }
  135. }
  136. /**
  137. * 判断是否存在某属性的 set方法
  138. * @param methods
  139. * @param fieldSetMet
  140. * @return boolean
  141. */
  142. public static boolean checkSetMet(Method[] methods, String fieldSetMet) {
  143. for (Method met : methods) {
  144. if (fieldSetMet.equals(met.getName())) {
  145. return true;
  146. }
  147. }
  148. return false;
  149. }
  150. /**
  151. * 判断是否存在某属性的 get方法
  152. * @param methods
  153. * @param fieldGetMet
  154. * @return boolean
  155. */
  156. public static boolean checkGetMet(Method[] methods, String fieldGetMet) {
  157. for (Method met : methods) {
  158. if (fieldGetMet.equals(met.getName())) {
  159. return true;
  160. }
  161. }
  162. return false;
  163. }
  164. /**
  165. * 拼接某属性的 get方法
  166. * @param fieldName
  167. * @return String
  168. */
  169. public static String parGetName(String fieldName) {
  170. if (null == fieldName || "".equals(fieldName)) {
  171. return null;
  172. }
  173. return "get" + fieldName.substring(0, 1).toUpperCase()
  174. + fieldName.substring(1);
  175. }
  176. /**
  177. * 拼接在某属性的 set方法
  178. * @param fieldName
  179. * @return String
  180. */
  181. public static String parSetName(String fieldName) {
  182. if (null == fieldName || "".equals(fieldName)) {
  183. return null;
  184. }
  185. return "set" + fieldName.substring(0, 1).toUpperCase()
  186. + fieldName.substring(1);
  187. }
  188. }