Property.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package com.yc.database.bean;
  2. import android.database.Cursor;
  3. import java.lang.reflect.Field;
  4. import java.util.Date;
  5. import com.yc.database.manager.FieldTypeManager;
  6. import com.yc.database.utils.DateUtil;
  7. import com.yc.database.utils.ValueUtil;
  8. /**
  9. * <pre>
  10. * @author yangchong
  11. * email : yangchong211@163.com
  12. * time : 2017/8/6
  13. * desc : 实体属性字段
  14. * revise:
  15. * </pre>
  16. */
  17. public class Property {
  18. /**
  19. * 字段名,建表时用
  20. */
  21. private String column;
  22. /**
  23. * 默认值,建表时要设置的字段默认值
  24. */
  25. private String defaultValue;
  26. /**
  27. * 该字段对应实体信息中的属性字段信息
  28. */
  29. private Field field;
  30. /**
  31. * 获取指定对象的当前字段的值
  32. * Author: hyl
  33. * Time: 2015-8-16下午10:23:35
  34. * @param entity 获取字段值的对象
  35. * @return
  36. */
  37. @SuppressWarnings("unchecked")
  38. public <T> T getValue(Object entity) {
  39. if(entity != null) {
  40. try {
  41. field.setAccessible(true);
  42. return (T) field.get(entity);
  43. } catch (IllegalArgumentException e) {
  44. e.printStackTrace();
  45. } catch (IllegalAccessException e) {
  46. e.printStackTrace();
  47. }
  48. }
  49. return null;
  50. }
  51. /**
  52. * 设置指定对象的当前字段的值
  53. * Author: hyl
  54. * Time: 2015-8-16下午10:24:08
  55. * @param entity 要设置字段值的对象
  56. * @param value 要设置的值
  57. * @throws Exception
  58. */
  59. public void setValue(Object entity, Object value) throws Exception {
  60. int fieldType = FieldTypeManager.getFieldType(field);
  61. try {
  62. field.setAccessible(true);
  63. switch(fieldType) {
  64. case FieldTypeManager.BASE_TYPE_BOOLEAN:
  65. field.set(entity, Boolean.parseBoolean(value.toString()));
  66. break;
  67. case FieldTypeManager.BASE_TYPE_BYTE_ARRAY:
  68. field.set(entity, (byte[])value);
  69. break;
  70. case FieldTypeManager.BASE_TYPE_CHAR:
  71. field.set(entity, value.toString().charAt(0));
  72. break;
  73. case FieldTypeManager.BASE_TYPE_STRING:
  74. field.set(entity, value.toString());
  75. break;
  76. case FieldTypeManager.BASE_TYPE_DATE:
  77. field.set(entity, DateUtil.formatDatetime((Date) value));
  78. break;
  79. case FieldTypeManager.BASE_TYPE_DOUBLE:
  80. field.set(entity, Double.parseDouble(value.toString()));
  81. break;
  82. case FieldTypeManager.BASE_TYPE_FLOAT:
  83. field.set(entity, Float.parseFloat(value.toString()));
  84. break;
  85. case FieldTypeManager.BASE_TYPE_INT:
  86. field.set(entity, Integer.parseInt(value.toString()));
  87. break;
  88. case FieldTypeManager.BASE_TYPE_LONG:
  89. field.set(entity, Long.parseLong(value.toString()));
  90. break;
  91. case FieldTypeManager.BASE_TYPE_SHORT:
  92. field.set(entity, Short.parseShort(value.toString()));
  93. break;
  94. }
  95. } catch (Exception e) {
  96. throw e;
  97. }
  98. }
  99. /**
  100. * 设置指定实体对象当前属性字段的值
  101. * Author: hyl
  102. * Time: 2015-8-21上午10:20:14
  103. * @param entity 要设置值的实体对象
  104. * @param cursor 数据来源
  105. * @throws Exception
  106. */
  107. public void setValue(Object entity, Cursor cursor) throws Exception {
  108. int fieldType = FieldTypeManager.getFieldType(field);
  109. try {
  110. int columnIdx = cursor.getColumnIndex(column);
  111. if(columnIdx == -1) {//当前游标中没有该字段的值
  112. return;
  113. }
  114. String columnValue = cursor.getString(columnIdx);
  115. boolean isEmpty = ValueUtil.isEmpty(columnValue);
  116. field.setAccessible(true);
  117. switch(fieldType) {
  118. case FieldTypeManager.BASE_TYPE_BOOLEAN:
  119. field.set(entity, isEmpty ? false : Boolean.parseBoolean(columnValue));
  120. break;
  121. case FieldTypeManager.BASE_TYPE_BYTE_ARRAY:
  122. field.set(entity, cursor.getBlob(columnIdx));
  123. break;
  124. case FieldTypeManager.BASE_TYPE_CHAR:
  125. field.set(entity, isEmpty ? Character.valueOf(' ') : columnValue.charAt(0));
  126. break;
  127. case FieldTypeManager.BASE_TYPE_STRING:
  128. field.set(entity, isEmpty ? "" : columnValue);
  129. break;
  130. case FieldTypeManager.BASE_TYPE_DATE:
  131. field.set(entity, isEmpty ? "" : DateUtil.parseDatetime(columnValue));
  132. break;
  133. case FieldTypeManager.BASE_TYPE_DOUBLE:
  134. field.set(entity, cursor.getDouble(columnIdx));
  135. break;
  136. case FieldTypeManager.BASE_TYPE_FLOAT:
  137. field.set(entity, cursor.getFloat(columnIdx));
  138. break;
  139. case FieldTypeManager.BASE_TYPE_INT:
  140. field.set(entity, cursor.getInt(columnIdx));
  141. break;
  142. case FieldTypeManager.BASE_TYPE_LONG:
  143. field.set(entity, cursor.getLong(columnIdx));
  144. break;
  145. case FieldTypeManager.BASE_TYPE_SHORT:
  146. field.set(entity, cursor.getShort(columnIdx));
  147. break;
  148. }
  149. } catch (Exception e) {
  150. throw e;
  151. }
  152. }
  153. public String getColumn() {
  154. return column;
  155. }
  156. public void setColumn(String column) {
  157. this.column = column;
  158. }
  159. public String getDefaultValue() {
  160. return defaultValue;
  161. }
  162. public void setDefaultValue(String defaultValue) {
  163. this.defaultValue = defaultValue;
  164. }
  165. public Field getField() {
  166. return field;
  167. }
  168. public void setField(Field field) {
  169. this.field = field;
  170. }
  171. }