在java后端开发中,使用mybatis作为持久层框架,mybatis generator作为代码生成工具。

介绍下如何快速使用mybatis generator。

前提条件

安装了jdk, maven,mysql。 确保 mysql 可连接 windows 上启动 mysql 服务, 管理员运行 net start mysql

第一步 新建表

CREATE TABLE `item` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(255) DEFAULT NULL COMMENT '商品编码',
  `name` varchar(255) DEFAULT NULL COMMENT '商品名称',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品信息表'

第二步 新建maven项目

通过maven 生成, mvn archetype:generate,生成了一堆不需要的东西,

直接用idea新建java project;

第三步 修改 pom.xml

添加依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>fun.aiwith.learn</groupId>
    <artifactId>test4</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>

        <!-- MyBatis依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version> <!-- 请使用你需要的版本 -->
        </dependency>

        <!-- MySQL JDBC 驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version> <!-- 请使用你需要的版本 -->
        </dependency>

        <!-- MyBatis Generator插件 -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.2</version> <!-- 请使用你需要的版本 -->
            <!--        <scope>runtime</scope>-->
        </dependency>
    </dependencies>

    <build>
        <plugins>

            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version> <!-- 请根据需要选择合适的版本 -->
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>

                <dependencies>
                    <!-- 添加当前项目依赖 -->
                    <dependency>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>${project.artifactId}</artifactId>
                        <version>${project.version}</version>
                    </dependency>

                    <!-- 添加你的数据库驱动 -->
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.27</version> <!-- 使用你的数据库版本 -->
                    </dependency>

                </dependencies>
                <configuration>
                    <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                </configuration>

            </plugin>

        </plugins>
    </build>
</project>

第四步 注释处理插件

新建类 fun.aiwith.tool.mybatis.generate.ColumnRemarkPlugin.java

package fun.aiwith.tool.mybatis.generate;

import java.util.List;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.Plugin;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.TopLevelClass;

public class ColumnRemarkPlugin extends PluginAdapter {
    public ColumnRemarkPlugin() {
    }

    @Override
    public boolean validate(List<String> warnings) {
        return true;
    }

    @Override
    public boolean modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, Plugin.ModelClassType modelClassType) {
        String remark = introspectedColumn.getRemarks();
        if (remark != null && remark.trim().length() > 0 && !"null".equals(remark)) {
            field.addJavaDocLine("/**");
            field.addJavaDocLine(" * " + remark.replaceAll("\r|\n|\r\n", ""));
            field.addJavaDocLine(" */");
        }

        return super.modelFieldGenerated(field, topLevelClass, introspectedColumn, introspectedTable, modelClassType);
    }
}

第五步 配置 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>

    <!-- JDBC 配置 -->
    <context id="MySQLContext" targetRuntime="MyBatis3Simple">

        <plugin type="fun.aiwith.tool.mybatis.generate.ColumnRemarkPlugin"></plugin>
        <!-- 启用注释生成器 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
            <!-- 确保不生成 Example 相关注释 -->
            <property name="suppressExampleClassGeneration" value="true"/>
        </commentGenerator>

        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/demo?characterEncoding=UTF-8&amp;useInformationSchema=true"
                        userId="root"
                        password="root">
        </jdbcConnection>


        <!-- 生成简洁的 Java 模型 -->
        <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
            <!-- 禁用 Example 类生成 -->
            <!-- 不生成构造方法 -->
            <property name="constructorBased" value="false"/>
        </javaModelGenerator>


        <!-- SQL 映射文件生成配置 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
            <!-- 禁用 Example 相关方法 -->
            <property name="enableExampleMethods" value="false"/>
        </sqlMapGenerator>


        <!-- Mapper 接口生成配置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <!-- 禁用 Example 类生成 -->
            <property name="exampleClass" value="false"/>
        </javaClientGenerator>


        <!-- 表配置 -->
        <table tableName="item" domainObjectName="Item">
            <!-- 只生成基本 CRUD -->
            <property name="insert" value="true"/>
            <property name="selectByPrimaryKey" value="true"/>
            <property name="updateByPrimaryKey" value="true"/>
            <property name="deleteByPrimaryKey" value="true"/>

            <!-- 禁用其他方法 -->
            <property name="selectByExample" value="false"/>
            <property name="updateByExample" value="false"/>
            <property name="deleteByExample" value="false"/>
            <property name="countByExample" value="false"/>

            <!-- 主键配置 -->
            <generatedKey column="id" sqlStatement="JDBC" identity="true"/>

        </table>
        <!-- 添加更多表... -->
    </context>

</generatorConfiguration>

第六步 运行

先安装插件 mvn install, 完成后, 在项目根目录下执行 mvn mybatis-generator:generate 命令,即可生成代码。

代码结构

.
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── fun
│   │   │       └── aiwith
│   │   │           └── tool
│   │   │               └── mybatis
│   │   │                   └── generate
│   │   │                       └── ColumnRemarkPlugin.java
│   │   └── resources
│   │       └── generatorConfig.xml 

遇到的问题

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.5 -DinteractiveMode=false