package com.yunping.asap.core.util; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.persistence.Id; import org.apache.commons.lang3.StringUtils; /** * 使用Java反射机制将Bean对象转换成Map(驼峰命名方式 —下划线命名方式) * * @author admin * */
public class CamelUnderlineUtil { /** * 主键字段名 */
public static final String PK ="pk"; private static final char UNDERLINE ='_'; /** * 驼峰命名转换成下划线方式名称,eg:cfConfigRecord > cf_config_record * * @param param * @return
*/
public static String camelToUnderline(String param) { if (StringUtils.isEmpty(param)) { return ""; } StringBuilder sb = new StringBuilder(); int len = param.length(); for (int i = 0; i < len; i++) { char c = param.charAt(i); if (Character.isUpperCase(c)) { sb.append(UNDERLINE); sb.append(Character.toLowerCase(c)); } else { sb.append(c); } } return sb.toString(); } /** * 下划线方式名称转换成驼峰命名,eg:cf_config_record > cfConfigRecord * * @param param * @return
*/
public static String underlineToCamel(String param){ if (StringUtils.isEmpty(param)) { return ""; } StringBuilder sb = new StringBuilder(); int len = param.length(); for (int i = 0; i < len; i++) { char c = param.charAt(i); if (c==UNDERLINE) { if(++i<len){ sb.append(Character.toUpperCase(param.charAt(i))); } } else { sb.append(c); } } return sb.toString(); } /** * Bean对象转Map方法<br/><br/> * * eg、{pk=ccr_id, ccr_id=1, operate_type=1, create_time=2020-08-24 13:44:09, remark=测试测试, sql=aaa} * * @param obj * @param clazz * @return * @throws Exception */
public static Map<String, String> convertObjectToMap(Object obj, Class clazz) throws Exception { Map<String, String> dstMap = new HashMap<String, String>(); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { if ("serialVersionUID".equals(field.getName())) { continue; } //获取主键字段
boolean hasIdAannotation = field.isAnnotationPresent(Id.class); if (hasIdAannotation) { dstMap.put(PK, CamelUnderlineUtil.camelToUnderline(field.getName())); } String dstName = CamelUnderlineUtil.camelToUnderline(field.getName()); PropertyDescriptor pd; pd = new PropertyDescriptor(field.getName(), clazz); Method method = pd.getReadMethod(); Object dstObject = method.invoke(obj); if (dstObject instanceof Date) { dstObject = DateUtil.dateToString((Date)dstObject); } if (dstObject instanceof ArrayList) { dstObject = ""; } dstMap.put(dstName, dstObject == null ? "" : dstObject.toString()); } return dstMap; } }
public class CamelUnderlineUtilTest { public static void main(String[] args) throws Exception { CfConfigRecord record = new CfConfigRecord(); record.setCcrId("1"); record.setSql("select * from cf_config_record limit 500"); record.setOperateType(1); record.setCreateTime(new Date()); record.setRemark("测试测试"); Map<String, String> dataMap = CamelUnderlineUtil.convertObjectToMap(record, CfConfigRecord.class); System.out.println(dataMap); } }