package com.yunyang.up.util;
import org.apache.commons.lang.StringUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
public class SqlUtil {
public static final char UNDERLINE_CHAR = '_';
/**
* 返回带单引号的字段
* 如:'苹果'
*/
public static String quotesField(String field) {
field = "'" + field + "'";
return field;
}
/**
* 下划线转驼峰
*
* @param underlineStr
* @return
*/
public static String underline2Camel(String underlineStr) {
if (StringUtils.isEmpty(underlineStr)) {
return StringUtils.EMPTY;
}
int len = underlineStr.length();
StringBuilder strb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
char c = underlineStr.charAt(i);
if (c == UNDERLINE_CHAR && (++i) < len) {
c = underlineStr.charAt(i);
strb.append(Character.toUpperCase(c));
} else {
strb.append(c);
}
}
return strb.toString();
}
/**
* 驼峰转下划线
*
* @param camelStr
* @return
*/
public static String camel2Underline(String camelStr) {
if (StringUtils.isEmpty(camelStr)) {
return StringUtils.EMPTY;
}
int len = camelStr.length();
StringBuilder strb = new StringBuilder(len + len >> 1);
for (int i = 0; i < len; i++) {
char c = camelStr.charAt(i);
if (Character.isUpperCase(c)) {
strb.append(UNDERLINE_CHAR);
strb.append(Character.toLowerCase(c));
} else {
strb.append(c);
}
}
return strb.toString();
}
/**
* 带下划线的key的Map转成驼峰形式的实体对象
*
* @param map map实体对象包含属性
* @param clazz 实体对象类型
* @return
*/
public static Object map2Object(Map<String, Object> map, Class<?> clazz) {
if (map == null) {
return null;
}
Object obj = null;
try {
obj = clazz.newInstance();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
int mod = field.getModifiers();
if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
continue;
}
field.setAccessible(true);
field.set(obj, map.get(camel2Underline(field.getName()))); // 获取带_下划线的名称的value值
}
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
/**
* 驼峰形式的实体对象转成带下划线的key的Map
*
* @param clazz 实体对象类型
* @return
*/
public static Map<String, Object> object2Map(Object obj, Class<?> clazz) {
if (clazz == null) {
return null;
}
Map<String, Object> map = new HashMap<>();
try {
// obj = clazz.newInstance();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
int mod = field.getModifiers();
if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
continue;
}
field.setAccessible(true);
String name = field.getName();
//根据属性名获取属性值
Object fieldValueByName = getFieldValueByName(name, obj);
map.put(camel2Underline(name), fieldValueByName);
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
/**
* 根据属性名获取属性值
*
* @param fieldName
* @param o
* @return
*/
private static Object getFieldValueByName(String fieldName, Object o) {
try {
//get方法的get 后的第一个字母是大写的
//get方法的get 后的第一个字母是大写的
//get方法的get 后的第一个字母是大写的
fieldName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1, fieldName.length());
String getter = "get" + fieldName;
Method method = o.getClass().getMethod(getter, new Class[]{});
Object value = method.invoke(o, new Object[]{});
return value;
} catch (Exception e) {
return null;
}
}
/* 根据属性名获取属性值
* */
/* private static Object getFieldValueByName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = o.getClass().getMethod(getter, new Class[] {});
Object value = method.invoke(o, new Object[] {});
return value;
} catch (Exception e) {
return null;
}
} */
}