经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
mybatis-generator扩展
来源:cnblogs  作者:疯狂阿贾克斯  时间:2018/11/9 19:25:16  对本文有异议

在新公司的新项目想用mybatis-generator来生成DAO层,有同事提出一些改进意见,遂获得源码后进行小幅改造。

目标:

  • 中文注释,精简注释
  • Model类使用lombok简化
  • 增加selectOneByExample方法(较多的使用唯一索引查询场景)

首先获得源码

在任一项目中引入jar包,使用maven download sources获取源码,最新版本1.3.7

  1. <dependency>
  2. <groupId>org.mybatis.generator</groupId>
  3. <artifactId>mybatis-generator-core</artifactId>
  4. <version>1.3.7</version>
  5. </dependency>

构建项目

新建一个maven项目,设置groupId和artifactId

  1. <groupId>com.mine.generator</groupId>
  2. <artifactId>mybatis-generator-core</artifactId>
  3. <version>1.0-SNAPSHOT</version>

把解压后的源码复制到目录

在pom.xml中添加项目依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>log4j</groupId>
  4. <artifactId>log4j</artifactId>
  5. <scope>provided</scope>
  6. <version>1.2.17</version>
  7. <optional>true</optional>
  8. </dependency>
  9. <dependency>
  10. <groupId>org.slf4j</groupId>
  11. <artifactId>slf4j-api</artifactId>
  12. <scope>provided</scope>
  13. <version>1.7.25</version>
  14. <optional>true</optional>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.apache.logging.log4j</groupId>
  18. <artifactId>log4j-api</artifactId>
  19. <scope>provided</scope>
  20. <version>2.11.0</version>
  21. <optional>true</optional>
  22. </dependency>
  23. <dependency>
  24. <groupId>commons-logging</groupId>
  25. <artifactId>commons-logging</artifactId>
  26. <scope>provided</scope>
  27. <version>1.2</version>
  28. <optional>true</optional>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.apache.ant</groupId>
  32. <artifactId>ant</artifactId>
  33. <scope>provided</scope>
  34. <version>1.10.4</version>
  35. <optional>true</optional>
  36. </dependency>
  37. <dependency>
  38. <groupId>org.junit.vintage</groupId>
  39. <artifactId>junit-vintage-engine</artifactId>
  40. <version>5.2.0</version>
  41. <scope>test</scope>
  42. </dependency>
  43. <dependency>
  44. <groupId>org.hsqldb</groupId>
  45. <artifactId>hsqldb</artifactId>
  46. <version>2.4.1</version>
  47. <scope>test</scope>
  48. </dependency>
  49. <dependency>
  50. <groupId>com.github.javaparser</groupId>
  51. <version>3.6.12</version>
  52. <artifactId>javaparser-core</artifactId>
  53. </dependency>
  54. </dependencies>
View Code

功能拓展

model中文注释、精简其他注释

修改生成注释默认用的DefaultCommentGenerator

  1. package org.mybatis.generator.internal;
  2. import org.mybatis.generator.api.CommentGenerator;
  3. import org.mybatis.generator.api.IntrospectedColumn;
  4. import org.mybatis.generator.api.IntrospectedTable;
  5. import org.mybatis.generator.api.MyBatisGenerator;
  6. import org.mybatis.generator.api.dom.java.*;
  7. import org.mybatis.generator.api.dom.xml.XmlElement;
  8. import org.mybatis.generator.internal.util.StringUtility;
  9. import java.text.SimpleDateFormat;
  10. import java.time.ZonedDateTime;
  11. import java.time.format.DateTimeFormatter;
  12. import java.util.Date;
  13. import java.util.Properties;
  14. import java.util.Set;
  15. /**
  16. * @author Jeff Butler
  17. */
  18. public class DefaultCommentGenerator implements CommentGenerator {
  19. private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  20. public DefaultCommentGenerator() {
  21. super();
  22. }
  23. @Override
  24. public void addJavaFileComment(CompilationUnit compilationUnit) {
  25. }
  26. @Override
  27. public void addComment(XmlElement xmlElement) {
  28. }
  29. @Override
  30. public void addRootComment(XmlElement rootElement) {
  31. }
  32. @Override
  33. public void addConfigurationProperties(Properties properties) {
  34. }
  35. protected String getDateString() {
  36. return dateFormat.format(new Date());
  37. }
  38. @Override
  39. public void addClassComment(InnerClass innerClass,
  40. IntrospectedTable introspectedTable) {
  41. }
  42. @Override
  43. public void addClassComment(InnerClass innerClass,
  44. IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
  45. }
  46. @Override
  47. public void addModelClassComment(TopLevelClass topLevelClass,
  48. IntrospectedTable introspectedTable) {
  49. topLevelClass.addJavaDocLine("/**");
  50. topLevelClass.addJavaDocLine(" * 生成日期:" + getDateString());
  51. topLevelClass.addJavaDocLine(" * 表名: " + introspectedTable.getFullyQualifiedTable().toString());
  52. topLevelClass.addJavaDocLine(" */");
  53. }
  54. @Override
  55. public void addEnumComment(InnerEnum innerEnum,
  56. IntrospectedTable introspectedTable) {
  57. }
  58. @Override
  59. public void addFieldComment(Field field,
  60. IntrospectedTable introspectedTable,
  61. IntrospectedColumn introspectedColumn) {
  62. field.addJavaDocLine("/**");
  63. field.addJavaDocLine(" * " + introspectedColumn.getRemarks());
  64. field.addJavaDocLine(" */");
  65. }
  66. @Override
  67. public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
  68. }
  69. @Override
  70. public void addGeneralMethodComment(Method method,
  71. IntrospectedTable introspectedTable) {
  72. }
  73. @Override
  74. public void addGetterComment(Method method,
  75. IntrospectedTable introspectedTable,
  76. IntrospectedColumn introspectedColumn) {
  77. }
  78. @Override
  79. public void addSetterComment(Method method,
  80. IntrospectedTable introspectedTable,
  81. IntrospectedColumn introspectedColumn) {
  82. }
  83. @Override
  84. public void addGeneralMethodAnnotation(Method method, IntrospectedTable introspectedTable,
  85. Set<FullyQualifiedJavaType> imports) {
  86. imports.add(new FullyQualifiedJavaType("javax.annotation.Generated"));
  87. String comment = "Source Table: " + introspectedTable.getFullyQualifiedTable().toString();
  88. method.addAnnotation(getGeneratedAnnotation(comment));
  89. }
  90. @Override
  91. public void addGeneralMethodAnnotation(Method method, IntrospectedTable introspectedTable,
  92. IntrospectedColumn introspectedColumn, Set<FullyQualifiedJavaType> imports) {
  93. imports.add(new FullyQualifiedJavaType("javax.annotation.Generated"));
  94. String comment = "Source field: "
  95. + introspectedTable.getFullyQualifiedTable().toString()
  96. + "."
  97. + introspectedColumn.getActualColumnName();
  98. method.addAnnotation(getGeneratedAnnotation(comment));
  99. }
  100. @Override
  101. public void addFieldAnnotation(Field field, IntrospectedTable introspectedTable,
  102. Set<FullyQualifiedJavaType> imports) {
  103. imports.add(new FullyQualifiedJavaType("javax.annotation.Generated"));
  104. String comment = "Source Table: " + introspectedTable.getFullyQualifiedTable().toString();
  105. field.addAnnotation(getGeneratedAnnotation(comment));
  106. }
  107. @Override
  108. public void addFieldAnnotation(Field field, IntrospectedTable introspectedTable,
  109. IntrospectedColumn introspectedColumn, Set<FullyQualifiedJavaType> imports) {
  110. imports.add(new FullyQualifiedJavaType("javax.annotation.Generated"));
  111. String comment = "Source field: "
  112. + introspectedTable.getFullyQualifiedTable().toString()
  113. + "."
  114. + introspectedColumn.getActualColumnName();
  115. field.addAnnotation(getGeneratedAnnotation(comment));
  116. String remarks = introspectedColumn.getRemarks();
  117. if (StringUtility.stringHasValue(remarks)) {
  118. field.addJavaDocLine("/**");
  119. field.addJavaDocLine(" * Database Column Remarks:");
  120. String[] remarkLines = remarks.split(System.getProperty("line.separator"));
  121. for (String remarkLine : remarkLines) {
  122. field.addJavaDocLine(" * " + remarkLine);
  123. }
  124. field.addJavaDocLine(" */");
  125. }
  126. }
  127. @Override
  128. public void addClassAnnotation(InnerClass innerClass, IntrospectedTable introspectedTable,
  129. Set<FullyQualifiedJavaType> imports) {
  130. imports.add(new FullyQualifiedJavaType("javax.annotation.Generated"));
  131. String comment = "Source Table: " + introspectedTable.getFullyQualifiedTable().toString();
  132. innerClass.addAnnotation(getGeneratedAnnotation(comment));
  133. }
  134. private String getGeneratedAnnotation(String comment) {
  135. StringBuilder buffer = new StringBuilder();
  136. buffer.append("@Generated(");
  137. buffer.append("value=\"");
  138. buffer.append(MyBatisGenerator.class.getName());
  139. buffer.append('\"');
  140. buffer.append(", date=\"");
  141. buffer.append(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(ZonedDateTime.now()));
  142. buffer.append('\"');
  143. buffer.append(", comments=\"");
  144. buffer.append(comment);
  145. buffer.append('\"');
  146. buffer.append(')');
  147. return buffer.toString();
  148. }
  149. }
View Code

Model类使用lombok简化

修改BaseRecordGenerator的getCompilationUnits的方法即可

  1.   public List<CompilationUnit> getCompilationUnits() {
  2. FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
  3. progressCallback.startTask(getString(
  4. "Progress.8", table.toString())); //$NON-NLS-1$
  5. Plugin plugins = context.getPlugins();
  6. CommentGenerator commentGenerator = context.getCommentGenerator();
  7. FullyQualifiedJavaType type = new FullyQualifiedJavaType(
  8. introspectedTable.getBaseRecordType());
  9. TopLevelClass topLevelClass = new TopLevelClass(type);
  10. topLevelClass.addImportedType("lombok.Getter");// 导入lombok类
  11. topLevelClass.addImportedType("lombok.Setter");
  12. topLevelClass.setVisibility(JavaVisibility.PUBLIC);
  13. commentGenerator.addJavaFileComment(topLevelClass);
  14. FullyQualifiedJavaType superClass = getSuperClass();
  15. if (superClass != null) {
  16. topLevelClass.setSuperClass(superClass);
  17. topLevelClass.addImportedType(superClass);
  18. }
  19. commentGenerator.addModelClassComment(topLevelClass, introspectedTable);
  20. topLevelClass.addAnnotation("@Getter");// 增加lombok注解
  21. topLevelClass.addAnnotation("@Setter");
  22. List<IntrospectedColumn> introspectedColumns = getColumnsInThisClass();
  23. if (introspectedTable.isConstructorBased()) {
  24. addParameterizedConstructor(topLevelClass, introspectedTable.getNonBLOBColumns());
  25. if (includeBLOBColumns()) {
  26. addParameterizedConstructor(topLevelClass, introspectedTable.getAllColumns());
  27. }
  28. if (!introspectedTable.isImmutable()) {
  29. addDefaultConstructor(topLevelClass);
  30. }
  31. }
  32. String rootClass = getRootClass();
  33. for (IntrospectedColumn introspectedColumn : introspectedColumns) {
  34. if (RootClassInfo.getInstance(rootClass, warnings)
  35. .containsProperty(introspectedColumn)) {
  36. continue;
  37. }
  38. Field field = getJavaBeansField(introspectedColumn, context, introspectedTable);
  39. if (plugins.modelFieldGenerated(field, topLevelClass,
  40. introspectedColumn, introspectedTable,
  41. Plugin.ModelClassType.BASE_RECORD)) {
  42. topLevelClass.addField(field);
  43. topLevelClass.addImportedType(field.getType());
  44. }
  45. }
  46. List<CompilationUnit> answer = new ArrayList<>();
  47. if (context.getPlugins().modelBaseRecordClassGenerated(
  48. topLevelClass, introspectedTable)) {
  49. answer.add(topLevelClass);
  50. }
  51. return answer;
      }

增加selectOneByExample

首先查看类似的方法selectByExample是怎么生成的,然后参考增加这个方法。

在IntrospectedTable中增加方法

  1.   public String getSelectOneByExampleStatementId() {
  2. return "selectOneByExample";//可以跟其他源码一样设置成常量,这里简单处理
  3.   }

增加一个SelectOneByExampleMethodGenerator

  1. /**
  2. * Copyright 2006-2016 the original author or authors.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.mybatis.generator.codegen.mybatis3.javamapper.elements;
  17. import org.mybatis.generator.api.dom.java.*;
  18. import java.util.Set;
  19. import java.util.TreeSet;
  20. /**
  21. *
  22. * @author Jeff Butler
  23. *
  24. */
  25. public class SelectOneByExampleMethodGenerator extends
  26. AbstractJavaMapperMethodGenerator {
  27. public SelectOneByExampleMethodGenerator() {
  28. super();
  29. }
  30. @Override
  31. public void addInterfaceElements(Interface interfaze) {
  32. Set<FullyQualifiedJavaType> importedTypes = new TreeSet<>();
  33. FullyQualifiedJavaType type = new FullyQualifiedJavaType(
  34. introspectedTable.getExampleType());
  35. importedTypes.add(type);
  36. importedTypes.add(FullyQualifiedJavaType.getNewListInstance());
  37. Method method = new Method();
  38. method.setVisibility(JavaVisibility.PUBLIC);
  39. FullyQualifiedJavaType returnType = introspectedTable.getRules()
  40. .calculateAllFieldsClass();
  41. method.setReturnType(returnType);
  42. method.setName(introspectedTable.getSelectOneByExampleStatementId());
  43. method.addParameter(new Parameter(type, "example")); //$NON-NLS-1$
  44. context.getCommentGenerator().addGeneralMethodComment(method,
  45. introspectedTable);
  46. addMapperAnnotations(interfaze, method);
  47. if (context.getPlugins()
  48. .clientSelectByExampleWithBLOBsMethodGenerated(method, interfaze,
  49. introspectedTable)) {
  50. addExtraImports(interfaze);
  51. interfaze.addImportedTypes(importedTypes);
  52. interfaze.addMethod(method);
  53. }
  54. }
  55. public void addMapperAnnotations(Interface interfaze, Method method) {
  56. }
  57. public void addExtraImports(Interface interfaze) {
  58. }
  59. }
View Code

增加一个SelectOneByExampleElementGenerator

  1. /**
  2. * Copyright 2006-2016 the original author or authors.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.mybatis.generator.codegen.mybatis3.xmlmapper.elements;
  17. import org.mybatis.generator.api.dom.xml.Attribute;
  18. import org.mybatis.generator.api.dom.xml.TextElement;
  19. import org.mybatis.generator.api.dom.xml.XmlElement;
  20. import static org.mybatis.generator.internal.util.StringUtility.stringHasValue;
  21. /**
  22. *
  23. * @author Jeff Butler
  24. *
  25. */
  26. public class SelectOneByExampleElementGenerator extends
  27. AbstractXmlElementGenerator {
  28. public SelectOneByExampleElementGenerator() {
  29. super();
  30. }
  31. @Override
  32. public void addElements(XmlElement parentElement) {
  33. String fqjt = introspectedTable.getExampleType();
  34. XmlElement answer = new XmlElement("select"); //$NON-NLS-1$
  35. answer.addAttribute(new Attribute("id", //$NON-NLS-1$
  36. introspectedTable.getSelectOneByExampleStatementId()));
  37. answer.addAttribute(new Attribute(
  38. "resultMap", introspectedTable.getBaseResultMapId())); //$NON-NLS-1$
  39. answer.addAttribute(new Attribute("parameterType", fqjt)); //$NON-NLS-1$
  40. context.getCommentGenerator().addComment(answer);
  41. answer.addElement(new TextElement("select")); //$NON-NLS-1$
  42. XmlElement ifElement = new XmlElement("if"); //$NON-NLS-1$
  43. ifElement.addAttribute(new Attribute("test", "distinct")); //$NON-NLS-1$ //$NON-NLS-2$
  44. ifElement.addElement(new TextElement("distinct")); //$NON-NLS-1$
  45. answer.addElement(ifElement);
  46. StringBuilder sb = new StringBuilder();
  47. if (stringHasValue(introspectedTable
  48. .getSelectByExampleQueryId())) {
  49. sb.append('\'');
  50. sb.append(introspectedTable.getSelectByExampleQueryId());
  51. sb.append("' as QUERYID,"); //$NON-NLS-1$
  52. answer.addElement(new TextElement(sb.toString()));
  53. }
  54. answer.addElement(getBaseColumnListElement());
  55. sb.setLength(0);
  56. sb.append("from "); //$NON-NLS-1$
  57. sb.append(introspectedTable
  58. .getAliasedFullyQualifiedTableNameAtRuntime());
  59. answer.addElement(new TextElement(sb.toString()));
  60. answer.addElement(getExampleIncludeElement());
  61. ifElement = new XmlElement("if"); //$NON-NLS-1$
  62. ifElement.addAttribute(new Attribute("test", "orderByClause != null")); //$NON-NLS-1$ //$NON-NLS-2$
  63. ifElement.addElement(new TextElement("order by ${orderByClause}")); //$NON-NLS-1$
  64. answer.addElement(ifElement);
  65. if (context.getPlugins()
  66. .sqlMapSelectByExampleWithoutBLOBsElementGenerated(answer,
  67. introspectedTable)) {
  68. parentElement.addElement(answer);
  69. }
  70. answer.addElement(new TextElement("limit 1"));
  71. }
  72. }
View Code

修改JavaMapperGenerator,在getCompilationUnits方法中增加addSelectOneByExampleMethod(interfaze),这里顺带把生成的代码排了个序,并且把不常用的几个方法给注释掉了。

  1. @Override
    public List<CompilationUnit> getCompilationUnits() {
    progressCallback.startTask(getString("Progress.17", //$NON-NLS-1$
    introspectedTable.getFullyQualifiedTable().toString()));
    CommentGenerator commentGenerator = context.getCommentGenerator();

    FullyQualifiedJavaType type = new FullyQualifiedJavaType(
    introspectedTable.getMyBatis3JavaMapperType());
    Interface interfaze = new Interface(type);
    interfaze.setVisibility(JavaVisibility.PUBLIC);
    commentGenerator.addJavaFileComment(interfaze);

    String rootInterface = introspectedTable
    .getTableConfigurationProperty(PropertyRegistry.ANY_ROOT_INTERFACE);
    if (!stringHasValue(rootInterface)) {
    rootInterface = context.getJavaClientGeneratorConfiguration()
    .getProperty(PropertyRegistry.ANY_ROOT_INTERFACE);
    }

    if (stringHasValue(rootInterface)) {
    FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType(
    rootInterface);
    interfaze.addSuperInterface(fqjt);
    interfaze.addImportedType(fqjt);
    }

    addInsertSelectiveMethod(interfaze);
    addDeleteByPrimaryKeyMethod(interfaze);
    addDeleteByExampleMethod(interfaze);
    addUpdateByPrimaryKeySelectiveMethod(interfaze);
    addUpdateByExampleSelectiveMethod(interfaze);
    addSelectByPrimaryKeyMethod(interfaze);
    addSelectOneByExampleMethod(interfaze); //由addSelectByExampleWithoutBLOBsMethod改造而来
    addSelectByExampleWithoutBLOBsMethod(interfaze);
    addSelectByExampleWithBLOBsMethod(interfaze);
    addCountByExampleMethod(interfaze);
    //addInsertMethod(interfaze);
    //addUpdateByExampleWithBLOBsMethod(interfaze);
    //addUpdateByExampleWithoutBLOBsMethod(interfaze);
    //addUpdateByPrimaryKeyWithBLOBsMethod(interfaze);
    //addUpdateByPrimaryKeyWithoutBLOBsMethod(interfaze);

    List<CompilationUnit> answer = new ArrayList<>();
    if (context.getPlugins().clientGenerated(interfaze, null,
    introspectedTable)) {
    answer.add(interfaze);
    }

    List<CompilationUnit> extraCompilationUnits = getExtraCompilationUnits();
    if (extraCompilationUnits != null) {
    answer.addAll(extraCompilationUnits);
    }

    return answer;
    }

  1. //增加方法
    protected void addSelectOneByExampleMethod(Interface interfaze) {
  2.   AbstractJavaMapperMethodGenerator methodGenerator = new SelectOneByExampleMethodGenerator();
  3.   initializeAndExecuteGenerator(methodGenerator, interfaze);
  4. }

 同样地,修改XMLMapperGenerator

  1. protected XmlElement getSqlMapElement() {
  2. FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
  3. progressCallback.startTask(getString(
  4. "Progress.12", table.toString())); //$NON-NLS-1$
  5. XmlElement answer = new XmlElement("mapper"); //$NON-NLS-1$
  6. String namespace = introspectedTable.getMyBatis3SqlMapNamespace();
  7. answer.addAttribute(new Attribute("namespace", //$NON-NLS-1$
  8. namespace));
  9. context.getCommentGenerator().addRootComment(answer);
  10. addResultMapWithoutBLOBsElement(answer);
  11. addResultMapWithBLOBsElement(answer);
  12. addExampleWhereClauseElement(answer);
  13. addMyBatis3UpdateByExampleWhereClauseElement(answer);
  14. addBaseColumnListElement(answer);
  15. addBlobColumnListElement(answer);
  16. addInsertSelectiveElement(answer);
  17. addDeleteByPrimaryKeyElement(answer);
  18. addDeleteByExampleElement(answer);
  19. addUpdateByPrimaryKeySelectiveElement(answer);
  20. addUpdateByExampleSelectiveElement(answer);
  21. addSelectByPrimaryKeyElement(answer);
  22. addSelectOneByExampleElement(answer);
  23. addSelectByExampleWithoutBLOBsElement(answer);
  24. addSelectByExampleWithBLOBsElement(answer);
  25. addCountByExampleElement(answer);
  26. //addSelectByExampleWithBLOBsElement(answer);
  27. //addInsertElement(answer);
  28. //addUpdateByExampleWithBLOBsElement(answer);
  29. //addUpdateByExampleWithoutBLOBsElement(answer);
  30. //addUpdateByPrimaryKeyWithBLOBsElement(answer);
  31. //addUpdateByPrimaryKeyWithoutBLOBsElement(answer);
  32.  
  33. return answer;
  34. }

  35. //增加方法
  36. protected void addSelectOneByExampleElement(XmlElement parentElement) {
  37.   if (introspectedTable.getRules().generateSelectByExampleWithoutBLOBs()) {
  38.     AbstractXmlElementGenerator elementGenerator = new SelectOneByExampleElementGenerator();
  39.     initializeAndExecuteGenerator(elementGenerator, parentElement);
  40.   }
  41. }

投入使用

deploy项目打包,然后在需要使用的项目中,修改pom.xml引入,再使用generator的generate命令即可

  1.        <plugin>
  2. <groupId>org.mybatis.generator</groupId>
  3. <artifactId>mybatis-generator-maven-plugin</artifactId>
  4. <version>1.3.7</version>
  5. <dependencies>
  6. <dependency>
  7. <groupId>com.mine.generator</groupId>
  8. <artifactId>mybatis-generator-core</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10. </dependency>
  11. </dependencies>
  12. </plugin>

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号