Mybatis generator根据数据库表自动生成*Mapper.xml、实体类

generator自动生成实体类的过程中加入lombok注解、自动继承基础类


第一步:在resources目录下新建generator配置文件。我自己写的如下:
(下面会专门讲里面的自定义插件,其他的配置网上一搜一大堆,应该没什么)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!--数据库驱动-->
    <context id="myGen" targetRuntime="MyBatis3">

        <!--自定义插件 -->
        <plugin type="com.weina.codegenerator.LombokPlugin">
            <property name="hasLombok" value="true"/>
        </plugin>

        <!--关闭注释-->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库链接地址账号密码-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost/myproject?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=UTC"
                        userId="root"
                        password="myc123456">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!--生成Model类存放位置-->
        <javaModelGenerator targetPackage="com.weina.myproject.entity" targetProject="entity/src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
            <property name="rootClass" value="com.weina.myproject.entity.BaseEntity"/>
        </javaModelGenerator>
        <!--生成映射文件存放位置-->
        <sqlMapGenerator targetPackage="com.weina.myproject.mapper" targetProject="entity/src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!--生成Dao类存放位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.weina.myproject.mapper" targetProject="entity/src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!--生成对应表及类名-->
        <!--<table tableName="test"
               domainObjectName="Test"
               enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false"></table>-->
        <table tableName="m_user"
               domainObjectName="MUser"
               enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false"></table>
    </context>
</generatorConfiguration>

第二步:在pom文件中加入下面配置(跟dependencies同级)

<build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <executions>
                    <execution>
                        <id>Generate Mybatis Files</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <verbose>true</verbose>
                            <overwrite>true</overwrite>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.13</version>
                    </dependency>
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>1.3.5</version>
                    </dependency>
                    <dependency>
                        <groupId>org.mybatis</groupId>
                        <artifactId>mybatis</artifactId>
                        <version>3.4.5</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

如果没有上面配置文件中的plugin(自定义插件),那么这样配置就可以使用了。但现在有配置。
第三步:在自己项目下新建一个插件类

public class LombokPlugin extends PluginAdapter {
    @Override
    public boolean validate(List<String> list) {
        return true;
    }

    @Override
    public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
        // 添加实体的import
        topLevelClass.addImportedType("com.weina.annotation.WnColumn"); 
        topLevelClass.addImportedType("com.weina.annotation.WnTable");
        topLevelClass.addImportedType("lombok.Data");
        topLevelClass.addImportedType("lombok.Builder");
        topLevelClass.addImportedType("lombok.NoArgsConstructor");
        topLevelClass.addImportedType("lombok.AllArgsConstructor");

        //添加实体的注解
        topLevelClass.addAnnotation("@Data");
        topLevelClass.addAnnotation("@Builder");
        topLevelClass.addAnnotation("@NoArgsConstructor");
        topLevelClass.addAnnotation("@AllArgsConstructor");
        topLevelClass.addAnnotation("@WnTable(tableName = \"" + introspectedTable.getFullyQualifiedTable() + "\")");

        //添加注释
        topLevelClass.addJavaDocLine("/**");
        topLevelClass.addJavaDocLine("* Created by Mybatis Generator on " + date2Str(new Date()));
        topLevelClass.addJavaDocLine("*/");
        return true;
    }

	// 添加字段注解
    @Override
    public boolean modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
        field.addAnnotation("@WnColumn(fieldName = \"" + introspectedColumn.getActualColumnName() + "\")");
        return true;
    }

    @Override
    public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
        return super.clientGenerated(interfaze, topLevelClass, introspectedTable);
    }

	// 由于我使用lombok,所以此处不生成setter方法
    @Override
    public boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
        //return super.modelSetterMethodGenerated(method, topLevelClass, introspectedColumn, introspectedTable, modelClassType);
        return false;
    }

    @Override
    public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
        return false;
    }

    private String date2Str(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        return sdf.format(date);
    }

上面这个类就是配置文件中使用的插件类。可自行修改
第四步:客户端类,生成代码的main方法类

public class GeneratorClient {
    public static void main(String[] args) {
        String path = GeneratorClient.class.getResource("/").getPath();
        String filePath = path + "generatorConfig.xml";// 这是我的配置文件名
        args = new String[] { "-configfile", filePath, "-overwrite" };
        //E:\Workspaces\IdeaProjects\myproject\entity\src\main\resources\generatorConfig.xml
        ShellRunner.main(args);
    }
}

运行main方法,即可生成想要的代码
注意:由于我的实体类都继承一个BaseEntity.所以运行之前,要建好BaseEntity类,BaseEntity中有的字段,不会在子类中生成,比如BaseEntity

public class BaseEntity {
	private Long id;
	private Long createTime;
}

那么生成子类的时候,如果子类中有这两个字段,就不会再在子类中生成了。
如果不需要子类继承统一父类,直接去掉配置文件中
javaModelGenerator下的

<property name="rootClass" value="com.weina.myproject.entity.BaseEntity"/>

就行了
之前看了好几篇文章,都说要把插件类先 生成jar包,再放到mybaits的jar中,试过,也行,但太麻烦了。
如果有人有疑问,我的目录结构如下:
在这里插入图片描述
如果需要完整项目,请移步
我的github

发布了33 篇原创文章 · 获赞 24 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Myc_CSDN/article/details/87619587