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 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("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); } }