SQLResolver 是公司内部的通过传入实体类获取字段值的用于辅助编写sql语句的类
StringUutils是用于字符串处理讲字符串首字母大写的工具类 通过先将字符串转为字符数组,然后将数组的第一个元素,即字符串首字母,进行ASCII 码前移,ASCII 中大写字母从65开始,小写字母从97开始,所以减去32的方法转换
public String modifyBankInfo(@Param("bankInfo") BankInfo bankInfo){
if (MODIFY_BANK_INFO_SQL==null){
synchronized (this){
if (MODIFY_BANK_INFO_SQL==null){
SQLResolver resolver = SQLResolver.from(BankInfo.class);
SQL sql = new SQL(){
{
UPDATE(resolver.getTableName());
//判断每一个字段值
resolver.getColumnMaps().forEach(entry->{
try {
//大写首字母拼接get属性的方法名
Method m = BankInfo.class.getMethod("get"+StringUutils.captureName(entry.getProperty()));
Object flag = m.invoke(bankInfo);
if (flag!=null){
StringBuilder sb = new StringBuilder();
sb.append(entry.getColumn());
sb.append(" = #{bankInfo.");
sb.append(entry.getProperty());
sb.append("}");
SET(sb.toString());
System.out.println("111");
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
});
WHERE("ACCOUNT_ID = #{bankInfo.accountId}");
}
};
MODIFY_BANK_INFO_SQL = sql.toString();
logger.debug("MODIFY_BANK_INFO_SQL {}:"+MODIFY_BANK_INFO_SQL);
}
}
}
return MODIFY_BANK_INFO_SQL;
}