首页>代码>maven整合mybatis+generator生成java自定义model实体类,dao接口和mapper映射文件>/demo-generator-mybatis/src/main/java/com/xe/demo/common/generator/GenPlugin2.java
package com.xe.demo.common.generator; import java.sql.Types; import java.util.HashSet; import java.util.List; import java.util.Properties; import java.util.Set; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.PluginAdapter; import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType; import org.mybatis.generator.api.dom.java.Interface; import org.mybatis.generator.api.dom.java.Method; import org.mybatis.generator.api.dom.java.TopLevelClass; import org.mybatis.generator.api.dom.xml.Attribute; import org.mybatis.generator.api.dom.xml.Document; import org.mybatis.generator.api.dom.xml.TextElement; import org.mybatis.generator.api.dom.xml.XmlElement; import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities; import org.mybatis.generator.config.CommentGeneratorConfiguration; import org.mybatis.generator.config.Context; /** * 自定义插件 * @author CZH */ public class GenPlugin2 extends PluginAdapter { private Set<String> mappers = new HashSet<String>(); // 注释生成器 private CommentGeneratorConfiguration commentCfg; @Override public void setContext(Context context) { super.setContext(context); // 设置默认的注释生成器 commentCfg = new CommentGeneratorConfiguration(); commentCfg.setConfigurationType(GenCommentGenerator.class.getCanonicalName()); context.setCommentGeneratorConfiguration(commentCfg); // 支持oracle获取注释#114 context.getJdbcConnectionConfiguration().addProperty("remarksReporting", "true"); } @Override public void setProperties(Properties properties) { super.setProperties(properties); String mappers = this.properties.getProperty("mappers"); for (String mapper : mappers.split(",")) { this.mappers.add(mapper); } } @Override public boolean validate(List<String> warnings) { return true; } /** * 生成的Mapper接口 * @param interfaze * @param topLevelClass * @param introspectedTable * @return */ @Override public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { // import接口 for (String mapper : mappers) { interfaze.addImportedType(new FullyQualifiedJavaType(mapper)); interfaze.addSuperInterface(new FullyQualifiedJavaType(mapper)); } return true; } @Override public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) { XmlElement rootElement = document.getRootElement(); // 数据库表名 String tableName = introspectedTable.getFullyQualifiedTableNameAtRuntime(); // 主键 IntrospectedColumn pkColumn = introspectedTable.getPrimaryKeyColumns().get(0); // 公共字段 XmlElement columnSql = new XmlElement("sql"); columnSql.addAttribute(new Attribute("id", "sql_columns")); StringBuilder columnStr = new StringBuilder(); // 添加公共where XmlElement whereSql = new XmlElement("sql"); whereSql.addAttribute(new Attribute("id", "sql_where")); XmlElement where = new XmlElement("where"); StringBuilder whereStr = new StringBuilder(); //拼装更新字段 XmlElement updateSql = new XmlElement("sql"); updateSql.addAttribute(new Attribute("id", "sql_update")); // 新增数据 XmlElement save = new XmlElement("insert"); save.addAttribute(new Attribute("id", "save")); save.addAttribute(new Attribute("keyProperty", pkColumn.getJavaProperty())); save.addAttribute(new Attribute("useGeneratedKeys", "true")); StringBuilder saveStr = new StringBuilder("insert into ").append(tableName).append("("); // 要插入的字段(排除自增主键) StringBuilder saveColumn = new StringBuilder(); // 要保存的值 StringBuilder saveValue = new StringBuilder(); // 批量保存 XmlElement batchSave = new XmlElement("insert"); batchSave.addAttribute(new Attribute("id", "batchSave")); StringBuilder btcSaveStr = new StringBuilder("insert into ").append(tableName).append("("); // 更新数据 XmlElement update = new XmlElement("update"); update.addAttribute(new Attribute("id", "update")); StringBuilder updateStr = new StringBuilder("update ").append(tableName).append(" set "). append(pkColumn.getActualColumnName()).append(" = #{").append(pkColumn.getJavaProperty()).append("}"); update.addElement(new TextElement(updateStr.toString())); // 批量更新 XmlElement batchUpdate = new XmlElement("update"); batchUpdate.addAttribute(new Attribute("id", "batchUpdate")); XmlElement foreachUpdate = new XmlElement("foreach"); foreachUpdate.addAttribute(new Attribute("collection", "list")); foreachUpdate.addAttribute(new Attribute("item", "item")); foreachUpdate.addAttribute(new Attribute("index", "index")); foreachUpdate.addAttribute(new Attribute("open", "")); foreachUpdate.addAttribute(new Attribute("close", "")); foreachUpdate.addAttribute(new Attribute("separator", ";")); batchUpdate.addElement(foreachUpdate); StringBuilder btcUpdateStr = new StringBuilder("update ").append(tableName).append(" set "). append(pkColumn.getActualColumnName()).append(" = #{item.").append(pkColumn.getJavaProperty()).append("}");; foreachUpdate.addElement(new TextElement(btcUpdateStr.toString())); // 数据库字段名 String columnName = null; // java字段名 String javaProperty = null; for (IntrospectedColumn introspectedColumn : introspectedTable.getAllColumns()) { columnName = MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn); javaProperty = introspectedColumn.getJavaProperty(); // 拼装字段 columnStr.append(columnName).append(","); // 拼装公共条件 XmlElement isNotNullElement = new XmlElement("if"); whereStr.setLength(0); whereStr.append("null != item.").append(javaProperty).append(" and '' != item.").append(javaProperty); isNotNullElement.addAttribute(new Attribute("test", whereStr.toString())); whereStr.setLength(0); whereStr.append(" , ").append(columnName).append(" = #{item.").append(javaProperty).append("}"); isNotNullElement.addElement(new TextElement(whereStr.toString())); where.addElement(isNotNullElement); updateSql.addElement(isNotNullElement); //保存SQL if (!introspectedColumn.isAutoIncrement()) { saveColumn.append(",").append(columnName); if(Types.TIMESTAMP == introspectedColumn.getJdbcType()){ saveValue.append(", now()"); }else{ saveValue.append(", #{item.").append(javaProperty).append("}"); } } } String columns = columnStr.substring(0, columnStr.length() - 1); columnStr = new StringBuilder("select ").append(columns).append(" from ").append(tableName); columnSql.addElement(new TextElement(columns)); rootElement.addElement(columnSql); whereSql.addElement(new TextElement(where.getFormattedContent(0).replaceAll(",", "and"))); rootElement.addElement(whereSql); rootElement.addElement(updateSql); saveStr.append(saveColumn.substring(1)).append(") values(").append(saveValue.substring(1)).append(")"); save.addElement(new TextElement(saveStr.toString())); btcSaveStr.append(saveColumn.substring(1)).append(") values"); batchSave.addElement(new TextElement(btcSaveStr.toString())); btcSaveStr.setLength(0); XmlElement foreach = new XmlElement("foreach"); foreach.addAttribute(new Attribute("collection", "list")); foreach.addAttribute(new Attribute("item", "item")); foreach.addAttribute(new Attribute("index", "index")); foreach.addAttribute(new Attribute("separator", ",")); foreach.addElement(new TextElement("(" + saveValue.toString().substring(1) + ")")); batchSave.addElement(foreach); XmlElement include = new XmlElement("include"); include.addAttribute(new Attribute("refid", "sql_update")); columnStr = new StringBuilder(" where ").append(pkColumn.getActualColumnName()).append(" = #{").append(pkColumn.getJavaProperty()).append("}"); update.addElement(include); update.addElement(new TextElement(columnStr.toString())); foreachUpdate.addElement(include); foreachUpdate.addElement(new TextElement(columnStr.toString())); rootElement.addElement(selectById(pkColumn, tableName)); rootElement.addElement(selectXml("selectOne", tableName)); rootElement.addElement(selectXml("selectList", tableName)); rootElement.addElement(selectPage(tableName)); rootElement.addElement(save); rootElement.addElement(batchSave); rootElement.addElement(update); rootElement.addElement(batchUpdate); rootElement.addElement(btcDels(tableName, pkColumn, "delArray", "array")); rootElement.addElement(btcDels(tableName, pkColumn, "delList", "list")); return super.sqlMapDocumentGenerated(document, introspectedTable); } private XmlElement select(String id, String tableName) { XmlElement select = new XmlElement("select"); select.addAttribute(new Attribute("id", id)); select.addAttribute(new Attribute("resultMap", "BaseResultMap")); select.addElement(new TextElement("select ")); XmlElement include = new XmlElement("include"); include.addAttribute(new Attribute("refid", "sql_columns")); select.addElement(include); select.addElement(new TextElement(" from " + tableName)); return select; } private XmlElement selectById(IntrospectedColumn pkColumn, String tableName) { XmlElement select = select("selectById", tableName); StringBuilder sb = new StringBuilder(" where "); sb.append(pkColumn.getActualColumnName()); sb.append(" = "); sb.append(MyBatis3FormattingUtilities.getParameterClause(pkColumn)); select.addElement(new TextElement(sb.toString())); return select; } private XmlElement selectPage(String tableName) { XmlElement select = selectXml("selectPage", tableName); select.addElement(new TextElement(" limit #{page.startRow}, #{page.pageSize}")); return select; } private XmlElement selectXml(String id, String tableName) { XmlElement select = select(id, tableName); XmlElement include = new XmlElement("include"); include.addAttribute(new Attribute("refid", "sql_where")); select.addElement(include); return select; } private XmlElement btcDels(String tableName, IntrospectedColumn pkColumn, String method, String type){ XmlElement delete = new XmlElement("delete"); delete.addAttribute(new Attribute("id", method)); delete.addElement(new TextElement("delete from " + tableName + " where " + pkColumn.getActualColumnName() + " in")); XmlElement foreach = new XmlElement("foreach"); foreach.addAttribute(new Attribute("collection", type)); foreach.addAttribute(new Attribute("item", "item")); foreach.addAttribute(new Attribute("index", "index")); foreach.addAttribute(new Attribute("open", "(")); foreach.addAttribute(new Attribute("separator", ",")); foreach.addAttribute(new Attribute("close", ")")); foreach.addElement(new TextElement("#{item}")); delete.addElement(foreach); return delete; } /** * mapping中添加方法 */ public boolean sqlMapDocumentGenerated2(Document document, IntrospectedTable introspectedTable) { // String tableName = introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime();// 数据库表名 return super.sqlMapDocumentGenerated(document, introspectedTable); } //以下设置为false,取消生成默认增删查改xml @Override public boolean clientDeleteByPrimaryKeyMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) { return false; } @Override public boolean clientInsertMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) { return false; } @Override public boolean clientSelectAllMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) { return false; } @Override public boolean clientSelectByPrimaryKeyMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) { return false; } @Override public boolean clientUpdateByPrimaryKeyWithoutBLOBsMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) { return false; } @Override public boolean sqlMapDeleteByPrimaryKeyElementGenerated(XmlElement element, IntrospectedTable introspectedTable) { return false; } @Override public boolean sqlMapInsertElementGenerated(XmlElement element, IntrospectedTable introspectedTable) { return false; } @Override public boolean sqlMapSelectAllElementGenerated(XmlElement element, IntrospectedTable introspectedTable) { return false; } @Override public boolean sqlMapSelectByPrimaryKeyElementGenerated(XmlElement element, IntrospectedTable introspectedTable) { return false; } @Override public boolean sqlMapUpdateByPrimaryKeyWithoutBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable) { return false; } }
最近下载更多
212600 LV7
2022年3月7日
blackcat123 LV7
2020年12月8日
hjc810794 LV8
2020年4月25日
jj1201 LV1
2020年3月31日
0312wangchen LV26
2019年9月20日
xiegeping LV24
2019年9月19日
xp95323 LV14
2019年8月21日
Swordmeng888 LV5
2019年7月2日
wumeicun LV1
2019年7月1日
随便1212 LV1
2019年6月26日