1.配置JavaBean與資料庫表欄位對映關係
/** * 欄位轉換方式 */ public enum Style { normal, //原值 camelhump, //駝峰轉下劃線 uppercase, //轉換為大寫 lowercase, //轉換為小寫 camelhumpAndUppercase, //駝峰轉下劃線大寫形式 camelhumpAndLowercase, //駝峰轉下劃線小寫形式 }
根據實體類名稱轉換表名稱
/** * 根據指定的樣式進行轉換 * * @param str * @param style * @return */ public static String convertByStyle(String str, Style style) { switch (style) { case camelhump: return camelhumpToUnderline(str); case uppercase: return str.toUpperCase(); case lowercase: return str.toLowerCase(); case camelhumpAndLowercase: return camelhumpToUnderline(str).toLowerCase(); case camelhumpAndUppercase: return camelhumpToUnderline(str).toUpperCase(); case normal: default: return str; }
具體的轉換方式
/** * 將駝峰風格替換為下劃線風格 */ public static String camelhumpToUnderline(String str) { final int size; final char[] chars; final StringBuilder sb = new StringBuilder( (size = (chars = str.toCharArray()).length) * 3 / 2 + 1); char c; for (int i = 0; i < size; i++) { c = chars[i]; if (isUppercaseAlpha(c)) { sb.append('_').append(toLowerAscii(c)); } else { sb.append(c); } } return sb.charAt(0) == '_' ? sb.substring(1) : sb.toString(); }
2.通過反射JavaBean拿到所有的field
/** * 獲取全部的Field,僅僅通過Field獲取 * * @param entityClass * @param fieldList * @param level * @return */ private List<EntityField> _getFields(Class<?> entityClass, List<EntityField> fieldList, Integer level) { if (fieldList == null) { fieldList = new ArrayList<EntityField>(); } if (level == null) { level = 0; } if (entityClass.equals(Object.class)) { return fieldList; } Field[] fields = entityClass.getDeclaredFields(); int index = 0; for (int i = 0; i < fields.length; i++) { Field field = fields[i]; //排除靜態欄位,解決bug#2 if (!Modifier.isStatic(field.getModifiers()) && !Modifier.isTransient(field.getModifiers())) { if (level.intValue() != 0) { //將父類的欄位放在前面 fieldList.add(index, new EntityField(field, null)); index++; } else { fieldList.add(new EntityField(field, null)); } } } Class<?> superClass = entityClass.getSuperclass(); if (superClass != null && !superClass.equals(Object.class) && (superClass.isAnnotationPresent(Entity.class) || (!Map.class.isAssignableFrom(superClass) && !Collection.class.isAssignableFrom(superClass)))) { return _getFields(entityClass.getSuperclass(), fieldList, ++level); } return fieldList; }