From d577762cafe94d9399d77cb4c6955ab176ff35ef Mon Sep 17 00:00:00 2001 From: admin <2780501319@qq.com> Date: 星期三, 30 六月 2021 02:36:59 +0800 Subject: [PATCH] Mybatis自动化代码生成优化 --- src/main/java/org/yeshi/utils/generater/mybatis/MyBatisMapperUtil.java | 647 +++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 386 insertions(+), 261 deletions(-) diff --git a/src/main/java/org/yeshi/utils/generater/mybatis/MyBatisMapperUtil.java b/src/main/java/org/yeshi/utils/generater/mybatis/MyBatisMapperUtil.java index b8bcbfb..8487d86 100644 --- a/src/main/java/org/yeshi/utils/generater/mybatis/MyBatisMapperUtil.java +++ b/src/main/java/org/yeshi/utils/generater/mybatis/MyBatisMapperUtil.java @@ -1,319 +1,444 @@ package org.yeshi.utils.generater.mybatis; +import java.beans.Transient; import java.io.File; import java.io.FileOutputStream; import java.io.PrintWriter; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.dom4j.DocumentHelper; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; +import org.yeshi.utils.generater.entity.MybatisColumnData; public class MyBatisMapperUtil { - private static String basePath = "D:/mybatis"; + private static String basePath = "D:/mybatis"; - static { - // 鍒涘缓宸ヤ綔鐩綍 - if (!new File(basePath).exists()) - new File(basePath).mkdirs(); - } + static { + // 鍒涘缓宸ヤ綔鐩綍 + if (!new File(basePath).exists()) + new File(basePath).mkdirs(); + } - // 鑾峰彇dao鎵�鍦ㄧ殑鍖呭悕 - private static String getDaoPackageName(Class<?> bean) { - String name = bean.getName(); - String[] ns = name.split("\\."); - if (ns.length > 2) { - String pks = ""; - for (int i = 0; i < ns.length - 2; i++) { - pks += ns[i] + "."; - } - return pks + "dao"; - } - return ""; - } + // 鑾峰彇dao鎵�鍦ㄧ殑鍖呭悕 + private static String getDaoPackageName(Class<?> bean) { + String name = bean.getName(); + String[] ns = name.split("\\."); + if (ns.length > 2) { + String pks = ""; + for (int i = 0; i < ns.length - 2; i++) { + pks += ns[i] + "."; + } + return pks + "dao"; + } + return ""; + } - private static String getMapperPackageName(Class<?> bean) { - String name = bean.getName(); - String[] ns = name.split("\\."); - if (ns.length > 2) { - String pks = ""; - for (int i = 0; i < ns.length - 2; i++) { - pks += ns[i] + "."; - } - return pks + "mapper"; - } - return ""; - } + private static String getMapperPackageName(Class<?> bean) { + String name = bean.getName(); + String[] ns = name.split("\\."); + if (ns.length > 2) { + String pks = ""; + for (int i = 0; i < ns.length - 2; i++) { + pks += ns[i] + "."; + } + return pks + "mapper"; + } + return ""; + } - public static void createMapper(Class<?> clz) { - // 鐢熸垚mapper java鏂囦欢 - String pks = getDaoPackageName(clz); - StringBuffer buffer = new StringBuffer("package " + pks + ";"); - buffer.append("\n\n"); - buffer.append("import " + clz.getName() + ";"); - buffer.append("\n\n"); - buffer.append(String.format("public interface %sMapper extends BaseMapper<%s> {", clz.getSimpleName(),clz.getSimpleName())); - buffer.append("\n\n\t"); - buffer.append("}"); - String daoName = String.format("%sMapper.java", clz.getSimpleName()); - String daoPath = basePath + "/dao/" + daoName; - try { - if (!new File(basePath + "/dao/").exists()) - new File(basePath + "/dao/").mkdirs(); - if (!new File(daoPath).exists()) - new File(daoPath).createNewFile(); - FileOutputStream fos = new FileOutputStream(new File(daoPath)); - PrintWriter pw = new PrintWriter(fos); - pw.write(buffer.toString().toCharArray()); - pw.flush(); - pw.close(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } + private static List<MybatisColumnData> createMapperDaoQuery(int importPosition, StringBuffer buffer, Class<?> clz) { + List<MybatisColumnData> queryColumnData = new ArrayList<>(); - /** - * 鐢熸垚Mapper xml鏂囦欢 - */ - // 鑾峰彇闇�瑕佹槧灏勭殑鍒� - List<AttributeColumnMap> keysList = new ArrayList<>(); - Field[] fields = clz.getDeclaredFields(); - for (Field fd : fields) { - Annotation[] as = fd.getAnnotations(); - for (Annotation a : as) { - if (a instanceof Column) { - Column c = (Column) a; - keysList.add(new AttributeColumnMap(fd.getName(), c.name(), fd.getType().getName())); - } - } - } - String tableName = ""; - Annotation[] as = clz.getAnnotations(); - for (Annotation a : as) { - if (a instanceof Table) { - Table t = (Table) a; - tableName = t.value(); - } - } + buffer.append("public static class DaoQuery{"); + buffer.append("\n\t"); + Field[] fields = clz.getDeclaredFields(); + Set<String> imports = new HashSet<>(); + for (Field fd : fields) { + String property = fd.getName(); + Annotation[] as = fd.getAnnotations(); + String columnName = fd.getName(); + for (Annotation a : as) { + if (a instanceof Transient || a instanceof org.springframework.data.annotation.Transient) { + property = null; + break; + } + if (a instanceof Column) { + columnName = ((Column) a).name(); + } + } - try { - String mapperName = String.format("%sMapper.xml", clz.getSimpleName()); - String mapperPath = basePath + "/mapper/" + mapperName; + String type = null; + if (property != null) { + //鍔� + String genericType = fd.getGenericType().getTypeName(); + if (genericType.indexOf(".") > -1) { + imports.add(genericType); + type = genericType.split("\\.")[genericType.split("\\.").length - 1]; + } else { + type = genericType; + } + if (type.equalsIgnoreCase("Date")) { + String tempProperty = "min" + property.substring(0, 1).toUpperCase() + property.substring(1); + buffer.append(String.format("\tpublic %s %s", type, tempProperty)); + queryColumnData.add(new MybatisColumnData(columnName, tempProperty, type)); + buffer.append("\n\t"); + tempProperty = "max" + property.substring(0, 1).toUpperCase() + property.substring(1); + buffer.append(String.format("\tpublic %s %s", type, tempProperty)); + queryColumnData.add(new MybatisColumnData(columnName, tempProperty, type)); + buffer.append("\n\t"); + } else { + buffer.append(String.format("\tpublic %s %s", type, property)); + queryColumnData.add(new MybatisColumnData(columnName, property, type)); + buffer.append("\n\t"); + } + } + } + buffer.append("\tpublic long start;"); + buffer.append("\n\t"); + buffer.append("\tpublic int count;"); + buffer.append("\n\t"); + buffer.append("\tpublic List<String> sortList;"); + buffer.append("\n\t"); + buffer.append("}"); + buffer.append("\n"); - org.dom4j.Document document = DocumentHelper.createDocument(); - document.addDocType("mapper", "-//mybatis.org//DTD Mapper 3.0//EN", - "http://mybatis.org/dtd/mybatis-3-mapper.dtd"); - org.dom4j.Element root = document.addElement("mapper"); - root.addAttribute("namespace", pks + "." + mapperName.replace(".xml", "")); + imports.add("org.apache.ibatis.annotations.Param"); + for (String im : imports) { + buffer.insert(importPosition, "\n" + String.format("import %s;", im)); + } + return queryColumnData; + } - org.dom4j.Element resultMap = root.addElement("resultMap"); - resultMap.addAttribute("id", "BaseResultMap"); - resultMap.addAttribute("type", clz.getName()); + public static void createMapper(Class<?> clz) { + // 鐢熸垚mapper java鏂囦欢 + String pks = getDaoPackageName(clz); + StringBuffer buffer = new StringBuffer("package " + pks + ";"); + int importPosition = buffer.length(); + buffer.append("\n\n"); + buffer.append("import " + clz.getName() + ";"); + buffer.append("\n\n"); + buffer.append(String.format("public interface %sMapper extends BaseMapper<%s> {", clz.getSimpleName(), clz.getSimpleName())); + buffer.append("\n\n\t"); - AttributeColumnMap idKeys = getAttributeColumnMapByAttribute("id", keysList); - if (idKeys != null) { - org.dom4j.Element id = resultMap.addElement("id"); - id.addAttribute("column", idKeys.column); - id.addAttribute("property", idKeys.attribute); - id.addAttribute("jdbcType", ColumnParseUtil.getJDBCType(idKeys.type)); - } + buffer.append(String.format("%s selectByPrimaryKeyForUpdate(@Param(\"id\") id);",clz.getSimpleName())); + buffer.append("\n\n\t"); - for (AttributeColumnMap key : keysList) { - if (key.attribute.equalsIgnoreCase(idKeys.attribute) || ColumnParseUtil.getJDBCType(key.type) == null) - continue; - org.dom4j.Element result = resultMap.addElement("result"); - result.addAttribute("column", key.column); - result.addAttribute("property", key.attribute); - result.addAttribute("jdbcType", ColumnParseUtil.getJDBCType(key.type)); - } + buffer.append(String.format("List<%s> list(@Param(\"query\") query);", clz.getSimpleName())); + buffer.append("\n\n\t"); + buffer.append("long count(@Param(\"query\") query);"); + buffer.append("\n\n\t"); - // 灞炴�у�间腑鍖呭惈瀹炰綋 - for (AttributeColumnMap key : keysList) { - if (ColumnParseUtil.getJDBCType(key.type) == null) { - Class<?> propertyClass = Class.forName(key.type); - String propertyMapper = getDaoPackageName(propertyClass) + "." + propertyClass.getSimpleName() - + "Mapper"; - org.dom4j.Element association = resultMap.addElement("association"); - association.addAttribute("property", key.attribute); - association.addAttribute("column", key.column); - association.addAttribute("resultMap", propertyMapper + ".BaseResultMap"); - key.attribute = key.attribute + ".id"; - key.type = "java.lang.Long"; - } - } - - org.dom4j.Element sql = root.addElement("sql"); - sql.addAttribute("id", "Base_Column_List"); - sql.setText(getColumns(keysList)); - - org.dom4j.Element select = root.addElement("select"); - select.addAttribute("id", "selectByPrimaryKey"); - select.addAttribute("resultMap", "BaseResultMap"); - select.addAttribute("parameterType", "java.lang.Long"); - select.addText("select"); - org.dom4j.Element include = select.addElement("include"); - include.addAttribute("refid", "Base_Column_List"); - select.addText(String.format("from %s where %s = #{%s,jdbcType=BIGINT}", tableName, idKeys.column, - idKeys.attribute)); + List<MybatisColumnData> queryColumnData = createMapperDaoQuery(importPosition, buffer, clz); - select = root.addElement("select"); - select.addAttribute("id", "selectByPrimaryKeyForUpdate"); - select.addAttribute("resultMap", "BaseResultMap"); - select.addAttribute("parameterType", "java.lang.Long"); - select.addText("select"); - include = select.addElement("include"); - include.addAttribute("refid", "Base_Column_List"); - select.addText(String.format("from %s where %s = #{%s,jdbcType=BIGINT} for update", tableName, idKeys.column, - idKeys.attribute)); + buffer.append("}"); + String daoName = String.format("%sMapper.java", clz.getSimpleName()); + String daoPath = basePath + "/dao/" + daoName; + try { + if (!new File(basePath + "/dao/").exists()) + new File(basePath + "/dao/").mkdirs(); + if (!new File(daoPath).exists()) + new File(daoPath).createNewFile(); + FileOutputStream fos = new FileOutputStream(new File(daoPath)); + PrintWriter pw = new PrintWriter(fos); + pw.write(buffer.toString().toCharArray()); + pw.flush(); + pw.close(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + + /** + * 鐢熸垚Mapper xml鏂囦欢 + */ + // 鑾峰彇闇�瑕佹槧灏勭殑鍒� + List<AttributeColumnMap> keysList = new ArrayList<>(); + Field[] fields = clz.getDeclaredFields(); + for (Field fd : fields) { + Annotation[] as = fd.getAnnotations(); + for (Annotation a : as) { + if (a instanceof Column) { + Column c = (Column) a; + keysList.add(new AttributeColumnMap(fd.getName(), c.name(), fd.getType().getName())); + } + } + } + String tableName = ""; + Annotation[] as = clz.getAnnotations(); + for (Annotation a : as) { + if (a instanceof Table) { + Table t = (Table) a; + tableName = t.value(); + } + } + + try { + String mapperName = String.format("%sMapper.xml", clz.getSimpleName()); + String mapperPath = basePath + "/mapper/" + mapperName; + + org.dom4j.Document document = DocumentHelper.createDocument(); + document.addDocType("mapper", "-//mybatis.org//DTD Mapper 3.0//EN", + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"); + org.dom4j.Element root = document.addElement("mapper"); + root.addAttribute("namespace", pks + "." + mapperName.replace(".xml", "")); + + org.dom4j.Element resultMap = root.addElement("resultMap"); + resultMap.addAttribute("id", "BaseResultMap"); + resultMap.addAttribute("type", clz.getName()); + + AttributeColumnMap idKeys = getAttributeColumnMapByAttribute("id", keysList); + if (idKeys != null) { + org.dom4j.Element id = resultMap.addElement("id"); + id.addAttribute("column", idKeys.column); + id.addAttribute("property", idKeys.attribute); + id.addAttribute("jdbcType", ColumnParseUtil.getJDBCType(idKeys.type)); + } + + for (AttributeColumnMap key : keysList) { + if (key.attribute.equalsIgnoreCase(idKeys.attribute) || ColumnParseUtil.getJDBCType(key.type) == null) + continue; + org.dom4j.Element result = resultMap.addElement("result"); + result.addAttribute("column", key.column); + result.addAttribute("property", key.attribute); + result.addAttribute("jdbcType", ColumnParseUtil.getJDBCType(key.type)); + } + + // 灞炴�у�间腑鍖呭惈瀹炰綋 + for (AttributeColumnMap key : keysList) { + if (ColumnParseUtil.getJDBCType(key.type) == null) { + Class<?> propertyClass = Class.forName(key.type); + String propertyMapper = getDaoPackageName(propertyClass) + "." + propertyClass.getSimpleName() + + "Mapper"; + org.dom4j.Element association = resultMap.addElement("association"); + association.addAttribute("property", key.attribute); + association.addAttribute("column", key.column); + association.addAttribute("resultMap", propertyMapper + ".BaseResultMap"); + key.attribute = key.attribute + ".id"; + key.type = "java.lang.Long"; + } + } + + org.dom4j.Element sql = root.addElement("sql"); + sql.addAttribute("id", "Base_Column_List"); + sql.setText(getColumns(keysList)); + + org.dom4j.Element select = root.addElement("select"); + select.addAttribute("id", "selectByPrimaryKey"); + select.addAttribute("resultMap", "BaseResultMap"); + select.addAttribute("parameterType", "java.lang.Long"); + select.addText("select"); + org.dom4j.Element include = select.addElement("include"); + include.addAttribute("refid", "Base_Column_List"); + select.addText(String.format("from %s where %s = #{%s,jdbcType=BIGINT}", tableName, idKeys.column, + idKeys.attribute)); + select = root.addElement("select"); + select.addAttribute("id", "selectByPrimaryKeyForUpdate"); + select.addAttribute("resultMap", "BaseResultMap"); + select.addAttribute("parameterType", "java.lang.Long"); + select.addText("select"); + include = select.addElement("include"); + include.addAttribute("refid", "Base_Column_List"); + select.addText(String.format("from %s where %s = #{%s,jdbcType=BIGINT} for update", tableName, idKeys.column, + idKeys.attribute)); + + //娣诲姞sql + sql = root.addElement("sql"); + sql.addAttribute("id", "listWhereSQL"); - org.dom4j.Element delete = root.addElement("delete"); - delete.addAttribute("id", "deleteByPrimaryKey"); - delete.addAttribute("parameterType", "java.lang.Long"); - delete.setText(String.format("delete from %s where %s = #{%s,jdbcType=BIGINT}", tableName, idKeys.column, - idKeys.attribute)); + for (MybatisColumnData columnData : queryColumnData) { + org.dom4j.Element ife = sql.addElement("if"); + ife.addAttribute("test", String.format("query.%s!=null", columnData.getProperty())); + if (columnData.getType().equalsIgnoreCase("Date")) { + if (columnData.getProperty().startsWith("min")) + ife.addText(String.format("AND %s >= #{query.%s}", columnData.getColumn(), columnData.getProperty())); + else + ife.addText(String.format("AND #{query.%s} > %s", columnData.getProperty(), columnData.getColumn())); + } else { + ife.addText(String.format("AND %s = #{query.%s}", columnData.getColumn(), columnData.getProperty())); + } + } + //鎵归噺鏌ヨ + select = root.addElement("select"); + select.addAttribute("id", "list"); + select.addAttribute("resultMap", "BaseResultMap"); + select.addText("select"); + include = select.addElement("include"); + include.addAttribute("refid", "Base_Column_List"); + select.addText(String.format("from %s where 1=1", tableName)); - org.dom4j.Element insert = root.addElement("insert"); - insert.addAttribute("id", "insert"); - insert.addAttribute("parameterType", clz.getName()); - insert.addAttribute("useGeneratedKeys", "true"); - insert.addAttribute("keyProperty", "id"); - StringBuffer text = new StringBuffer(); - text.append(String.format("insert into %s (", tableName)); - text.append(getColumns(keysList)); - text.append(")"); - text.append(" values ("); - for (AttributeColumnMap acm : keysList) - text.append(getKeyPair(acm)).append(","); - text.deleteCharAt(text.length() - 1); - text.append(")"); - insert.setText(text.toString()); + include = select.addElement("include"); + include.addAttribute("refid", "listWhereSQL"); - org.dom4j.Element insertSelective = root.addElement("insert"); - insertSelective.addAttribute("id", "insertSelective"); - insertSelective.addAttribute("parameterType", clz.getName()); - insertSelective.addAttribute("useGeneratedKeys", "true"); - insertSelective.addAttribute("keyProperty", "id"); - insertSelective.addText("insert into " + tableName); + org.dom4j.Element ife = select.addElement("if"); + ife.addAttribute("test", "query.sortList!=null"); + org.dom4j.Element foreach = ife.addElement("foreach"); + foreach.addAttribute("collection", "query.sortList"); + foreach.addAttribute("item", "item"); + foreach.addAttribute("open", " order by "); + foreach.addAttribute("separator", ","); + foreach.addText(" #{item}"); + select.addText("limit #{query.start},#{query.count}"); - org.dom4j.Element trim = insertSelective.addElement("trim"); - trim.addAttribute("prefix", "("); - trim.addAttribute("suffix", ")"); - trim.addAttribute("suffixOverrides", ","); - for (AttributeColumnMap acm : keysList) { - org.dom4j.Element iff = trim.addElement("if"); - iff.addAttribute("test", - (acm.attribute.indexOf(".") > -1 ? acm.attribute.split("\\.")[0] : acm.attribute) + " != null"); - iff.setText(acm.column + ","); - } + //鎵归噺璁℃暟 + select = root.addElement("select"); + select.addAttribute("id", "count"); + select.addAttribute("resultType", "java.lang.Long"); + select.addText(String.format(" select count(*) from %s where 1=1", tableName)); + include = select.addElement("include"); + include.addAttribute("refid", "listWhereSQL"); - insertSelective.addText("values"); - trim = insertSelective.addElement("trim"); - trim.addAttribute("prefix", "("); - trim.addAttribute("suffix", ")"); - trim.addAttribute("suffixOverrides", ","); - for (AttributeColumnMap acm : keysList) { - org.dom4j.Element iff = trim.addElement("if"); - iff.addAttribute("test", - (acm.attribute.indexOf(".") > -1 ? acm.attribute.split("\\.")[0] : acm.attribute) + " != null"); - iff.setText(getKeyPair(acm) + ","); - } + org.dom4j.Element delete = root.addElement("delete"); + delete.addAttribute("id", "deleteByPrimaryKey"); + delete.addAttribute("parameterType", "java.lang.Long"); + delete.setText(String.format("delete from %s where %s = #{%s,jdbcType=BIGINT}", tableName, idKeys.column, + idKeys.attribute)); - // update + org.dom4j.Element insert = root.addElement("insert"); + insert.addAttribute("id", "insert"); + insert.addAttribute("parameterType", clz.getName()); + insert.addAttribute("useGeneratedKeys", "true"); + insert.addAttribute("keyProperty", "id"); + StringBuffer text = new StringBuffer(); + text.append(String.format("insert into %s (", tableName)); + text.append(getColumns(keysList)); + text.append(")"); + text.append(" values ("); + for (AttributeColumnMap acm : keysList) + text.append(getKeyPair(acm)).append(","); + text.deleteCharAt(text.length() - 1); + text.append(")"); + insert.setText(text.toString()); - org.dom4j.Element update = root.addElement("update"); - update.addAttribute("id", "updateByPrimaryKey"); - update.addAttribute("parameterType", clz.getName()); - text = new StringBuffer(String.format("update %s set ", tableName)); - for (AttributeColumnMap acm : keysList) { - if (acm.attribute.equalsIgnoreCase(idKeys.attribute)) - continue; - text.append(String.format("%s = #{%s,jdbcType=%s}", acm.column, acm.attribute, - ColumnParseUtil.getJDBCType(acm.type))).append(","); - } - text.deleteCharAt(text.length() - 1); + org.dom4j.Element insertSelective = root.addElement("insert"); + insertSelective.addAttribute("id", "insertSelective"); + insertSelective.addAttribute("parameterType", clz.getName()); + insertSelective.addAttribute("useGeneratedKeys", "true"); + insertSelective.addAttribute("keyProperty", "id"); + insertSelective.addText("insert into " + tableName); - text.append(String.format(" where %s = #{%s,jdbcType=%s}", idKeys.column, idKeys.attribute, - ColumnParseUtil.getJDBCType(idKeys.type))); + org.dom4j.Element trim = insertSelective.addElement("trim"); + trim.addAttribute("prefix", "("); + trim.addAttribute("suffix", ")"); + trim.addAttribute("suffixOverrides", ","); + for (AttributeColumnMap acm : keysList) { + org.dom4j.Element iff = trim.addElement("if"); + iff.addAttribute("test", + (acm.attribute.indexOf(".") > -1 ? acm.attribute.split("\\.")[0] : acm.attribute) + " != null"); + iff.setText(acm.column + ","); + } - update.setText(text.toString()); + insertSelective.addText("values"); - // updateSelective - org.dom4j.Element updateSelective = root.addElement("update"); - updateSelective.addAttribute("id", "updateByPrimaryKeySelective"); - updateSelective.addAttribute("parameterType", clz.getName()); - updateSelective.addText("update " + tableName); - org.dom4j.Element set = updateSelective.addElement("set"); + trim = insertSelective.addElement("trim"); + trim.addAttribute("prefix", "("); + trim.addAttribute("suffix", ")"); + trim.addAttribute("suffixOverrides", ","); + for (AttributeColumnMap acm : keysList) { + org.dom4j.Element iff = trim.addElement("if"); + iff.addAttribute("test", + (acm.attribute.indexOf(".") > -1 ? acm.attribute.split("\\.")[0] : acm.attribute) + " != null"); + iff.setText(getKeyPair(acm) + ","); + } - for (AttributeColumnMap acm : keysList) { - if (acm.attribute.equalsIgnoreCase(idKeys.attribute)) - continue; - org.dom4j.Element iff = set.addElement("if"); - iff.addAttribute("test", - (acm.attribute.indexOf(".") > -1 ? acm.attribute.split("\\.")[0] : acm.attribute) + " != null"); - iff.setText(acm.column + "=" + getKeyPair(acm) + ","); - } + // update - updateSelective.addText(String.format(" where %s = #{%s,jdbcType=%s}", idKeys.column, idKeys.attribute, - ColumnParseUtil.getJDBCType(idKeys.type))); + org.dom4j.Element update = root.addElement("update"); + update.addAttribute("id", "updateByPrimaryKey"); + update.addAttribute("parameterType", clz.getName()); + text = new StringBuffer(String.format("update %s set ", tableName)); + for (AttributeColumnMap acm : keysList) { + if (acm.attribute.equalsIgnoreCase(idKeys.attribute)) + continue; + text.append(String.format("%s = #{%s,jdbcType=%s}", acm.column, acm.attribute, + ColumnParseUtil.getJDBCType(acm.type))).append(","); + } + text.deleteCharAt(text.length() - 1); - // 鍒涘缓mapper鏂囦欢 + text.append(String.format(" where %s = #{%s,jdbcType=%s}", idKeys.column, idKeys.attribute, + ColumnParseUtil.getJDBCType(idKeys.type))); - if (!new File(basePath + "/mapper/").exists()) - new File(basePath + "/mapper/").mkdirs(); - if (!new File(mapperPath).exists()) - new File(mapperPath).createNewFile(); + update.setText(text.toString()); - XMLWriter writer = new XMLWriter(new FileOutputStream(new File(mapperPath)), - OutputFormat.createPrettyPrint()); - writer.setEscapeText(false);// 瀛楃鏄惁杞箟,榛樿true - writer.write(document); - writer.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } + // updateSelective + org.dom4j.Element updateSelective = root.addElement("update"); + updateSelective.addAttribute("id", "updateByPrimaryKeySelective"); + updateSelective.addAttribute("parameterType", clz.getName()); + updateSelective.addText("update " + tableName); + org.dom4j.Element set = updateSelective.addElement("set"); - private static AttributeColumnMap getAttributeColumnMapByAttribute(String attributeName, - List<AttributeColumnMap> list) { - for (AttributeColumnMap acm : list) - if (acm.attribute.equalsIgnoreCase(attributeName)) - return acm; - return null; - } + for (AttributeColumnMap acm : keysList) { + if (acm.attribute.equalsIgnoreCase(idKeys.attribute)) + continue; + org.dom4j.Element iff = set.addElement("if"); + iff.addAttribute("test", + (acm.attribute.indexOf(".") > -1 ? acm.attribute.split("\\.")[0] : acm.attribute) + " != null"); + iff.setText(acm.column + "=" + getKeyPair(acm) + ","); + } - private static String getColumns(List<AttributeColumnMap> list) { - String columns = ""; - for (AttributeColumnMap map : list) - columns += map.column + ","; - return columns.length() > 0 ? columns.substring(0, columns.length() - 1) : columns; - } + updateSelective.addText(String.format(" where %s = #{%s,jdbcType=%s}", idKeys.column, idKeys.attribute, + ColumnParseUtil.getJDBCType(idKeys.type))); - private static String getKeyPair(AttributeColumnMap map) { - return String.format("#{%s,jdbcType=%s}", map.attribute, ColumnParseUtil.getJDBCType(map.type)); - } + // 鍒涘缓mapper鏂囦欢 + + if (!new File(basePath + "/mapper/").exists()) + new File(basePath + "/mapper/").mkdirs(); + if (!new File(mapperPath).exists()) + new File(mapperPath).createNewFile(); + + XMLWriter writer = new XMLWriter(new FileOutputStream(new File(mapperPath)), + OutputFormat.createPrettyPrint()); + writer.setEscapeText(false);// 瀛楃鏄惁杞箟,榛樿true + writer.write(document); + writer.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static AttributeColumnMap getAttributeColumnMapByAttribute(String attributeName, + List<AttributeColumnMap> list) { + for (AttributeColumnMap acm : list) + if (acm.attribute.equalsIgnoreCase(attributeName)) + return acm; + return null; + } + + private static String getColumns(List<AttributeColumnMap> list) { + String columns = ""; + for (AttributeColumnMap map : list) + columns += map.column + ","; + return columns.length() > 0 ? columns.substring(0, columns.length() - 1) : columns; + } + + private static String getKeyPair(AttributeColumnMap map) { + return String.format("#{%s,jdbcType=%s}", map.attribute, ColumnParseUtil.getJDBCType(map.type)); + } } class AttributeColumnMap { - String attribute; - String column; - String type; + String attribute; + String column; + String type; - public AttributeColumnMap(String attribute, String column, String type) { - this.attribute = attribute; - this.column = column; - this.type = type; - } + public AttributeColumnMap(String attribute, String column, String type) { + this.attribute = attribute; + this.column = column; + this.type = type; + } - public AttributeColumnMap() { + public AttributeColumnMap() { - } + } } -- Gitblit v1.8.0