package org.yeshi.utils.generater.mongo;
|
|
import org.springframework.data.annotation.Transient;
|
import org.yeshi.utils.entity.wx.WXAPPInfo;
|
|
import java.lang.annotation.Annotation;
|
import java.lang.reflect.Field;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
public class MongoDaoUtil {
|
|
/**
|
* 获取有效的属性
|
*
|
* @param clz
|
* @return
|
*/
|
private static List<Field> getValidField(Class<?> clz) {
|
List<Field> list = new ArrayList<>();
|
Field[] fields = clz.getDeclaredFields();
|
for (Field fd : fields) {
|
Annotation[] as = fd.getAnnotations();
|
boolean create = true;
|
for (Annotation a : as) {
|
if (a instanceof Transient || a instanceof java.beans.Transient) {
|
create = false;
|
break;
|
}
|
}
|
if (create) {
|
list.add(fd);
|
}
|
}
|
return list;
|
}
|
|
public static String createUpdateSelective(Class<?> clz) {
|
|
List<Field> fields = getValidField(clz);
|
StringBuilder builder = new StringBuilder();
|
|
builder.append(String.format("public void updateSelective(%s bean) {\r\n", clz.getSimpleName()));
|
|
builder.append(" Query query = new Query();\r\n");
|
builder.append(" query.addCriteria(Criteria.where(\"id\").is(bean.getId()));\r\n");
|
|
builder.append(" Update update = new Update();\r\n");
|
for (Field f : fields) {
|
if ("id".equalsIgnoreCase(f.getName()) || "createTime".equalsIgnoreCase(f.getName()))
|
continue;
|
|
if (f.getModifiers() == 25) {//public final static修饰
|
continue;
|
}
|
String getMethod = String.format("bean.get%s()", f.getName().substring(0, 1).toUpperCase() + f.getName().substring(1));
|
if (f.getName().equalsIgnoreCase("updateTime")) {
|
builder.append(String.format(" update.set(\"%s\", %s);\r\n", f.getName(), "new Date()"));
|
} else {
|
builder.append(String.format(" if (%s != null) {\r\n", getMethod));
|
builder.append(String.format(" update.set(\"%s\", %s);\r\n", f.getName(), f.getName().equalsIgnoreCase("updateTime") ? "new Date()" : getMethod));
|
builder.append(" }\r\n");
|
}
|
}
|
|
builder.append(" update(query, update);\r\n");
|
builder.append("}");
|
return builder.toString();
|
}
|
|
|
public static void main(String[] args) {
|
MongoDaoUtil.createUpdateSelective(WXAPPInfo.class);
|
}
|
|
}
|