在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


MyBatis 逆向工程 (MyBatis Generator)


1. 什么是逆向工程?

  • 根据数据库表结构自动生成:
    • 实体类(POJO)
    • Mapper 接口
    • Mapper XML 映射文件

2. 核心功能

  • 自动生成基础CRUD操作
  • 支持动态SQL生成
  • 可生成Example类用于复杂条件查询

MyBatis Generator是一个为 MyBatis 框架设计代码生成工具

它可以根据数据库表结构自动生成相应的 Java ModelMapper 接口以及 SQL映射文件

简化数据访问层的编码工作,使得开发者可以更专注于业务逻辑的实现

接下来我们看下,如何使用MyBatis Generator来生成代码。


引入插件


Mybatis Generator 官网:

MyBatis Generator Core – Introduction to MyBatis Generator


<plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.3.6</version>
    <executions>
        <execution>
            <id>Generate MyBatis Artifacts</id>
            <phase>deploy</phase>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <!--generator配置文件所在位置-->
        <configurationFile>src/main/resources/mybatisGenerator/generatorConfig.xml</configurationFile>
        <!-- 允许覆盖生成的文件, mapxml不会覆盖, 采用追加的方式-->
        <overwrite>true</overwrite>
        <verbose>true</verbose>
        <!--将当前pom的依赖项添加到生成器的类路径中-->
        <includeCompileDependencies>true</includeCompileDependencies>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
    </dependencies>
</plugin>

敲一个回车

image-20250412174316357


复制上述依赖并刷新:

image-20250412174406612


image-20250413082557807


在官网中介绍中我们发现,不同的插件版本,会携带一些新功能:

image-20250413083027209


如果我们不知道 MyBatis Generate 有哪些版本,可以去 Maven 中央仓库中查找:

Maven Repository: org.mybatis.generator » mybatis-generator-maven-plugin

image-20250413083425341


image-20250413083900688


添加 generatorConfig.xml


image-20250412175430648


文件路径配置和对应文件名称保持一致:

image-20250410180547682


image-20250413084146667


image-20250413084427764


image-20250413084622677


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 -->
    <context id="MysqlTables" targetRuntime="MyBatis3Simple">
        <!--禁用自动生成的注释-->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--数据库连接信息-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://127.0.0.1:3306/java_blog_spring?
            serverTimezone=Asia/Shanghai&amp;nullCatalogMeansCurrent=true"
            userId="root"
            password="root">
        </jdbcConnection>
        <!-- 生成实体类, 配置路径 -->
        <javaModelGenerator targetPackage="com.example.demo.model"
            targetProject="src/main/java" >
            <property name="enableSubPackages" value="false"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成mapxml文件 -->
        <sqlMapGenerator targetPackage="mapper"
            targetProject="src/main/resources" >
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- 生成mapxml对应client,也就是接口dao -->
        <javaClientGenerator targetPackage="com.example.demo.mapper"
            targetProject="src/main/java" type="XMLMAPPER" >
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- table可以有多个,tableName表示要匹配的数据库表 -->
        <table tableName="user" domainObjectName="UserInfo"
            enableSelectByExample="true"
            enableDeleteByExample="true" enableDeleteByPrimaryKey="true"
            enableCountByExample="true"
            enableUpdateByExample="true">
            <!-- 类的属性是否用数据库中的真实字段名做为属性名, 不指定这个属性会自动转
            换 _ 为驼峰命名规则 -->
            <property name="useActualColumnNames" value="false" />
            <!-- 数据库表主键 -->
            <generatedKey column="id" sqlStatement="Mysql" identity="true" />
        </table>

    </context>
</generatorConfiguration>

image-20250413084851583


一个数据库一个 context:

image-20250413092031509


配置数据库链接信息:

image-20250413092237947


生成实体类

image-20250413092849703


生成 mapper.xml 文件

image-20250413093106125


image-20250413093253161


tableName 表示要匹配的数据库表,也可以在 tableName 属性中,通过使用% 通配符来匹配所有数据库表

image-20250413094204745

table 可以有多个,每个数据库中的表都可以写一个或多个table;

image-20250413094334018


只有匹配的表才会自动生成文件

image-20250413094627910


生成文件


双击运行就可以了

image-20250413094801786


image-20250413094939708


我们查看生成的文件,涵盖了基本的数据库字段和基本的增删查改方法,我们可以在这些生成的文件中进行修改,比如在 model 类中加上 @Data ,可以让 model 类更加简洁…

image-20250413095119100


上面的方法只生成了简单的增删改查接口,如果我们要生成 SQL 这样稍微复杂的语句,该如何操作呢?我们先删除刚刚 mybatis generate 生成的文件:

image-20250413095735611


修改 Runtime:

image-20250413095816952


按照刚刚的方法,重新生成文件:

image-20250413095919726


这次生成的 mapper 接口中就多了很多方法:

image-20250413100019155


逆向工程建议


  • 生成的代码需要二次开发时可使用<plugin>扩展点
  • 复杂业务查询仍需手动编写SQL
  • 表结构变更后需要重新生成代码

在这里插入图片描述

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐