今天在写mybatis的映射时候考虑到了这么一点,如果前面给我传过来一个空字符串怎么办,我在网上没有查到对应的映射文件怎么写,所以自己写一个util来处理这种情况。(lombok应该能处理这种情况,但是小组成员没有几个用的)。
用成员变量加反射完成get与set操作
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* @Author: Peony
* @Date: 2020/4/27 20:23
*/
public class ObjectBlank {
/*若传进来的某个值为""或者null,自动赋值为null,如果不这么写就需要在最后 sql语句判断,
* 但是那里不会写
* */
public static void objectBlank(Object obj) throws Exception {//简单起见直接全加锁
synchronized (obj.getClass()) {
Class bean = obj.getClass();
Field[] fs = bean.getDeclaredFields();
for (int i = 0; i < fs.length; i++) {
//下面是通过get方法获取值,拼接成getXXX和setXXX方法
String fieldName = fs[i].getName();
StringBuilder sb = new StringBuilder(fieldName);
String firstWord = sb.substring(0,1);
sb.delete(0,1);
StringBuilder methodName = sb.insert(0,
firstWord.toUpperCase());
StringBuilder tmpmethodName = new StringBuilder(methodName);
StringBuilder getName = methodName.insert(0,"get");
Method getter = bean.getMethod(getName.toString());
Object ans = getter.invoke(obj);
if (ans != null && "".equals(ans.toString().trim())) {
//赋值为null
StringBuilder setName = tmpmethodName.insert(0,"set");
String NULL = null;
//getMethod要传对应的名字和参数,两个都不能少,不然找不到
//下面这个invoke传多个参数,直接写null会报错
bean.getMethod(setName.toString(),fs[i].getType()).
invoke(obj,NULL);
}
}
}
}
}
第一次写这种底层东西,不知道会有什么问题。