Field[] fields = pojoClazz.getDeclaredFields();
List<String> pks = null;
if (usePhysicalPk) {
pks = new ArrayList<String>();
for (Field f : fields) {
ORMColumn ormc = f.getAnnotation(ORMColumn.class);
if (ormc != null && ormc.physicalPkFld()) {
pks.add(ormc.value());
}
}
} else {
pks = new ArrayList<String>();
for (Field f : fields) {
ORMColumn ormc = f.getAnnotation(ORMColumn.class);
if (ormc != null && ormc.LogicPkFld()) {
pks.add(ormc.value());
}
}
}
for (Field field : fields) {
field.setAccessible(true);
ORMColumn ormc = field.getAnnotation(ORMColumn.class);
// 主键不允许修改
if (ormc != null && !pks.contains(ormc.value())) {
Object val = field.get(pojo);
if (val != null) {
// 不是空才去设置
if (ormc.append()) {
upd.append(ormc.value()).append("=").append(ormc.value()).append("||?, "); // XXX 只适合Oracle,需要方言支持
} else {
upd.append(ormc.value()).append("=?, ");
}
params.add(val);
} else if (!"null".equalsIgnoreCase(ormc.defaultValue())) {
// 是null,但是有默认值,则设置
switch (ormc.defaultValueScope()) {
case ALL:
case UPDATE:
if (ormc.append()) {
upd.append(ormc.value()).append("=").append(ormc.value()).append("||?, "); // XXX 只适合Oracle,需要方言支持
} else {
upd.append(ormc.value()).append("=?, ");
}
Object value = ORMColumn.DEFAULT_DATE.equals(ormc.defaultValue()) ? new Date() : ValueUtils.conversionType(ormc.defaultValue(), field.getType());
params.add(value);
break;
default:
break;
}
}
}
}
upd.replace(upd.length() - 2, upd.length(), " ");
// WHERE
if (pks != null && pks.size() > 0) {
upd.append("WHERE ");
for (String pk : pks) {
for (Field field : fields) {
field.setAccessible(true);
ORMColumn ormc = field.getAnnotation(ORMColumn.class);
if (ormc != null && ormc.value().equalsIgnoreCase(pk)) {
// 是主键,作为条件
upd.append(pk).append("=? AND ");
Object val = field.get(pojo);
params.add(val);
}