一、需要先创建工程

  1. 先在pom.xml文件里面把依赖添加上去
  2. 把配置文件复制过来
  3. 确定包路径(逆向工程的时候需要)
  4. 导入Mybatis工具类
  5. 创建dao层和bean类存放位置的包


二、设计数据库:


三、逆向工程配置:


generatorConfig.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <!-- 配置生成器 -->
  6. <generatorConfiguration>
  7. <context id="mysql" defaultModelType="flat" targetRuntime="MyBatis3">
  8. <property name="autoDelimitKeywords" value="false"/>
  9. <!-- 生成的Java文件的编码 -->
  10. <property name="javaFileEncoding" value="UTF-8"/>
  11. <!-- 格式化java代码 -->
  12. <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
  13. <!-- 格式化XML代码 -->
  14. <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
  15. <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
  16. <property name="beginningDelimiter" value="`"/>
  17. <property name="endingDelimiter" value="`"/>
  18. <!-- 自定义lombok增强 -->
  19. <plugin type="plugins.LombokPlugin" >
  20. <property name="hasLombok" value="true"/>
  21. </plugin>
  22. <!--通过type属性改成自己注解解析器-->
  23. <commentGenerator type="plugins.MyCommentGenerator">
  24. <property name="suppressDate" value="true"/>
  25. <!-- 是否去除自动生成的注释 true:是 : false:否 -->
  26. <!--<property name="suppressAllComments" value="true" />-->
  27. <property name="addRemarkComments" value="true" />
  28. </commentGenerator>
  29. <!-- 数据库连接信息ps:需要手动更改
  30. <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&amp;characterEncoding=UTF-8"
  31. userId="root"
  32. password="123456">
  33. <!-- 这里面可以设置property属性,每一个property属性都设置到配置的Driver上 -->
  34. </jdbcConnection>
  35. <!-- java类型处理器-->
  36. <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
  37. <property name="forceBigDecimals" value="false"/>
  38. </javaTypeResolver>
  39. <!-- 需要手动更改
  40. <!-- java模型创建器,是必须要的元素 -->
  41. <javaModelGenerator targetPackage="com.xxgc.mybatis.pojo" targetProject="src/main/java">
  42. <property name="constructorBased" value="false"/>
  43. <property name="enableSubPackages" value="true"/>
  44. <property name="trimStrings" value="true"/>
  45. <property name="immutable" value="false"/>
  46. <property name="trimStrings" value="true"/>
  47. </javaModelGenerator>
  48. <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
  49. <property name="enableSubPackages" value="true"/>
  50. </sqlMapGenerator>
  51. <javaClientGenerator targetPackage="com.xxgc.mybatis.dao" type="XMLMAPPER" targetProject="src/main/java">
  52. <property name="enableSubPackages" value="true"/>
  53. </javaClientGenerator>
  54. <!-- 要生成的表-->
  55. <table tableName="users"/>
  56. <table tableName="money"/>
  57. </context>
  58. </generatorConfiguration>


3.1 判断数据库连接是否正确:

  1. <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&amp;characterEncoding=UTF-8"
  2. userId="root"
  3. password="123456">
  4. <!-- 这里面可以设置property属性,每一个property属性都设置到配置的Driver上 -->
  5. </jdbcConnection>

3.2 判断映射类包路径:

  1. <!-- java模型创建器,是必须要的元素 -->
  2. <javaModelGenerator targetPackage="com.xxgc.mybatis.entity" targetProject="src/main/java">
  3. <property name="constructorBased" value="false"/>
  4. <property name="enableSubPackages" value="true"/>
  5. <property name="trimStrings" value="true"/>
  6. <property name="immutable" value="false"/>
  7. <property name="trimStrings" value="true"/>
  8. </javaModelGenerator>

3.3 dao层包路径:

  1. <javaClientGenerator targetPackage="com.xxgc.mybatis.dao" type="XMLMAPPER" targetProject="src/main/java">
  2. <property name="enableSubPackages" value="true"/>
  3. </javaClientGenerator>

3.4 查看要生成的表:

  1. <!--要生成的表-->
  2. <table tableName="users"/>
  3. <table tableName="money"/>

四、 在java包下创建包 plugins (在下面创建两个类:[MyCommentGenerator](https://gitee.com/ringo-tyl/mybatis-reverse-engineering/blob/master/src/main/java/plugins/MyCommentGenerator.java)

LombokPlugin.java:

  1. package plugins;
  2. import org.mybatis.generator.api.IntrospectedColumn;
  3. import org.mybatis.generator.api.IntrospectedTable;
  4. import org.mybatis.generator.api.PluginAdapter;
  5. import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
  6. import org.mybatis.generator.api.dom.java.Interface;
  7. import org.mybatis.generator.api.dom.java.Method;
  8. import org.mybatis.generator.api.dom.java.TopLevelClass;
  9. import java.text.SimpleDateFormat;
  10. import java.util.Date;
  11. import java.util.List;
  12. /**
  13. * @ClassName LombokPlugin
  14. * @Description: TODO
  15. * @Author 唐哥
  16. * @Date 2021/10/25
  17. * @Version V1.0
  18. **/
  19. @SuppressWarnings("unused")
  20. public class LombokPlugin extends PluginAdapter {
  21. @Override
  22. public boolean validate(List<String> list) {
  23. return true;
  24. }
  25. @Override
  26. public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
  27. //实体类的import
  28. topLevelClass.addImportedType("java.io.Serializable");
  29. topLevelClass.addImportedType("lombok.Data");
  30. topLevelClass.addImportedType("lombok.Builder");
  31. topLevelClass.addImportedType("lombok.NoArgsConstructor");
  32. topLevelClass.addImportedType("lombok.AllArgsConstructor");
  33. //实体类的注解
  34. topLevelClass.addAnnotation("@Data");
  35. topLevelClass.addAnnotation("@Builder");
  36. topLevelClass.addAnnotation("@NoArgsConstructor");
  37. topLevelClass.addAnnotation("@AllArgsConstructor");
  38. //实体类的注释
  39. topLevelClass.addJavaDocLine("/**");
  40. topLevelClass.addJavaDocLine(" * @唐哥");
  41. topLevelClass.addJavaDocLine(" * @date " + new SimpleDateFormat("yyyy/MM/dd/hh:mm").format(new Date()));
  42. topLevelClass.addJavaDocLine(" */");
  43. //接口
  44. topLevelClass.addSuperInterface(new FullyQualifiedJavaType("java.io.Serializable"));
  45. return true;
  46. }
  47. @Override
  48. public boolean clientGenerated(Interface anInterface, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
  49. //Mapper文件的注释
  50. anInterface.addJavaDocLine("/**");
  51. anInterface.addJavaDocLine(" * @唐哥");
  52. anInterface.addJavaDocLine(" * @date " + new SimpleDateFormat("yyyy/MM/dd/hh:mm").format(new Date()));
  53. anInterface.addJavaDocLine(" */");
  54. return true;
  55. }
  56. @Override
  57. public boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
  58. //不生成getter
  59. return false;
  60. }
  61. @Override
  62. public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
  63. //不生成setter
  64. return false;
  65. }
  66. }



MyCommentGenerator.java:

  1. package plugins;
  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.dom.java.*;
  6. import org.mybatis.generator.api.dom.xml.XmlElement;
  7. import java.util.Properties;
  8. /**
  9. * 注解解析器
  10. * @ClassName MyCommentGenerator
  11. * @Description: TODO
  12. * @Author 唐哥
  13. * @Date 2021/10/25
  14. * @Version V1.0
  15. **/
  16. public class MyCommentGenerator implements CommentGenerator {
  17. @Override
  18. public void addConfigurationProperties(Properties properties) {
  19. }
  20. @Override
  21. public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
  22. }
  23. @Override
  24. public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
  25. }
  26. @Override
  27. public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
  28. }
  29. @Override
  30. public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
  31. }
  32. @Override
  33. public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean b) {
  34. }
  35. @Override
  36. public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
  37. }
  38. @Override
  39. public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
  40. }
  41. @Override
  42. public void addSetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
  43. }
  44. @Override
  45. public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
  46. }
  47. @Override
  48. public void addJavaFileComment(CompilationUnit compilationUnit) {
  49. }
  50. @Override
  51. public void addComment(XmlElement xmlElement) {
  52. }
  53. @Override
  54. public void addRootComment(XmlElement xmlElement) {
  55. }
  56. }

启动类 Generator.java:

  1. package main;
  2. import org.mybatis.generator.api.MyBatisGenerator;
  3. import org.mybatis.generator.config.Configuration;
  4. import org.mybatis.generator.config.xml.ConfigurationParser;
  5. import org.mybatis.generator.exception.XMLParserException;
  6. import org.mybatis.generator.internal.DefaultShellCallback;
  7. import java.io.File;
  8. import java.util.ArrayList;
  9. /**
  10. * 用于生成逆向工程
  11. *
  12. */
  13. public class Generator {
  14. //加载配置文件
  15. public void mybatisGenerator() throws Exception {
  16. ArrayList<String> warnings = new ArrayList<>();
  17. File file = new File("./src/main/resources/generatorConfig.xml");
  18. ConfigurationParser parser = new ConfigurationParser(warnings);
  19. Configuration configuration = parser.parseConfiguration(file);
  20. DefaultShellCallback defaultShellCallback = new DefaultShellCallback(true);
  21. MyBatisGenerator myBatisGenerator = new MyBatisGenerator(configuration, defaultShellCallback, warnings);
  22. myBatisGenerator.generate(null);
  23. }
  24. public static void main(String[] args) throws Exception {
  25. System.out.println("开始逆向工程");
  26. Generator generator = new Generator();
  27. generator.mybatisGenerator();
  28. System.out.println("结束逆向工程");
  29. }
  30. }