mybatis 逆向工程整合lombok+ 中文註釋

前言

最近項目需要添加mybatis的逆向工程,特總結了自己,搬磚搬的demo


1.實現的功能

主要整合了lombok插件實現getter/setter等通用方法的自動生成,同時自定義實現了一個註釋生成器, 通過抓取數據庫表裏面的註釋作爲實體類的註釋內容。

2.插件的用法

pom文件需要添加如下配置:

<plugin>
                 <groupId>org.mybatis.generator</groupId>
                 <artifactId>mybatis-generator-maven-plugin</artifactId>
                 <version>1.3.7</version>
                 <configuration>
                     <verbose>true</verbose>
                     <overwrite>true</overwrite>
                     <configurationFile>
                         src/main/resources/generator/generatorConfig.xml
                     </configurationFile>
                 </configuration>
                 <dependencies>
                     <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
                     <dependency>
                         <groupId>org.mybatis.generator</groupId>
                         <artifactId>mybatis-generator-core</artifactId>
                         <version>1.3.7</version>
                     </dependency>
                     <dependency>
                         <groupId>mysql</groupId>
                         <artifactId>mysql-connector-java</artifactId>
                         <version>8.0.15</version>
                     </dependency>
                     <dependency>
                         <groupId>tk.mybatis</groupId>
                         <artifactId>mapper</artifactId>
                         <version>3.4.4</version>
                     </dependency>
                 </dependencies>
             </plugin>

  • 同時添加配置文件generatorConfig.xml,使用的時候請根據項目需要自行修改對應配置

<?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="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="javaFileEncoding" value="UTF-8"/>
        <!--通用 Mapper 插件,可以生成帶註解的實體類-->
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
            <property name="caseSensitive" value="true"/>
            <property name="forceAnnotation" value="true"/>
            <property name="beginningDelimiter" value="`"/>
            <property name="endingDelimiter" value="`"/>
            <!--配置是否啓用lombok, 支持如下6種註解-->
            <!--當配置 Data 後,Getter Setter ToString EqualsAndHashCode 會被忽略-->
            <property name="lombok" value="Getter,Setter,Data,ToString,Accessors,EqualsAndHashCode"/>
        </plugin>

        <commentGenerator>
            <!-- 是否去除自動生成的註釋 true:是 : false:-->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <!--數據庫連接的信息:驅動類、連接地址、用戶名、密碼 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/zcw?serverTimezone=UTC" userId="root"
                        password="root">
            <!--去除xxxWithBLOBs的影響-->
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>

        <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析爲 Integer,爲 true時把JDBC DECIMAL 和
            NUMERIC 類型解析爲java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- targetProject:生成PO類的位置 -->
        <javaModelGenerator targetPackage="com.zcw.model"
                            targetProject=".\src\main\java">
            <!-- enableSubPackages:是否讓schema作爲包的後綴 -->
            <property name="enableSubPackages" value="false" />
            <!-- 從數據庫返回的值被清理前後的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject=".\src\main\resources">
            <!-- enableSubPackages:是否讓schema作爲包的後綴 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>

        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.zcw.mapper"
                             targetProject=".\src\main\java">
            <!-- enableSubPackages:是否讓schema作爲包的後綴 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 指定數據庫表 -->
        <!-- <table schema="" tableName="tb_item" domainObjectName="Item"></table>
            domainObjectName 可以配置生成的pojo名字
            如不需要example類添加下面四個屬性
            enableCountByExample="false" enableDeleteByExample="false"
            enableSelectByExample="false" enableUpdateByExample="false"></table>-->
        <table tableName="test" 	 domainObjectName="test"
               enableCountByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" enableUpdateByExample="false"></table>
    </context>
</generatorConfiguration>


在這裏插入圖片描述
需要加載這個jar包,目前maven倉庫沒有
下載地址爲:

3.運行效果

[INFO] Introspecting table test
[INFO] Generating Record class for table test
[INFO] Generating Mapper Interface for table test
[INFO] Generating SQL Map for table test
[INFO] Saving file testMapper.xml
[INFO] Saving file test.java
[INFO] Saving file testMapper.java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.654 s
[INFO] Finished at: 2020-06-24T13:19:08+08:00

  • 實體類:
package com.zcw.model;

import javax.persistence.*;

@Table(name = "`test`")
public class test {
    @Id
    @Column(name = "`id`")
    private Integer id;

    /**
     * 姓名
     */
    @Column(name = "`name`")
    private String name;

    /**
     * @return id
     */
    public Integer getId() {
        return id;
    }

    /**
     * @param id
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 獲取姓名
     *
     * @return name - 姓名
     */
    public String getName() {
        return name;
    }

    /**
     * 設置姓名
     *
     * @param name 姓名
     */
    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }
}

  • Mapper文件:
package com.zcw.mapper;

import com.zcw.model.test;
import tk.mybatis.mapper.common.Mapper;

public interface testMapper extends Mapper<test> {
}

  • xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zcw.mapper.testMapper">
  <resultMap id="BaseResultMap" type="com.zcw.model.test">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
  </resultMap>
</mapper>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章