package org.yeshi.utils.mongo; import org.springframework.data.annotation.Transient; import org.springframework.data.mongodb.core.query.Update; 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 getValidField(Class clz) { List 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 fields = getValidField(clz); StringBuilder builder = new StringBuilder(); builder.append(String.format("void updateSelective(%s bean){\r\n", clz.getSimpleName())); builder.append(" Update update=new Update();\r\n"); for (Field f : fields) { String getMethod = String.format("bean.get%s()", f.getName().substring(0, 1).toUpperCase() + f.getName().substring(1)); builder.append(String.format(" if(%s!=null){\r\n", getMethod)); builder.append(String.format(" update.set(\"%s\",%s)\r\n", f.getName(), getMethod)); builder.append(" }\r\n"); } builder.append("}"); System.out.println(builder.toString()); return builder.toString(); } public static void main(String[] args) { MongoDaoUtil.createUpdateSelective(WXAPPInfo.class); } }