springboot整合mybatis (四)generator

本文详细介绍了如何使用MyBatis Generator在Maven项目中自动生成代码,包括在pom.xml中配置插件,创建generatorConfig.xml配置文件,以及设置数据库连接等关键步骤。通过这些步骤,可以自动化生成Java模型、Mapper接口和XML映射文件,提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码自动生成

版本1.3.7

一、Mybatis Generator简介


Mybatis Generator(MBG)是Mybatis官方提供的一个代码生成工具,它可以根据数据库表自动生成对应的Java Model、Mapper和XML文件,甚至还可以生成一些高级查询功能,使用Mybatis-Generator可以大大降低开发者的工作量,提高开发效率!
 

二、Maven插件运行方式

首先在工程demo27的pom.xml中,根节点project下添加build节点,如下:

   <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <configuration>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.21</version>
                    </dependency>
                </dependencies>
            </plugin>


        </plugins>
    </build>

然后刷新demo27的Maven依赖,你就能看到mybatis-generator插件了,如下图:
 

注意,这时生成时会报错,因为我们还需要添加配置文件,接着向下看.

三、生成配置 generatorConfig.xml

在demo27的 src/main/resources 下 添加配置文件: generatorConfig.xml ,用于配置生成风格,数据库连接、生成代码包路径、生成哪些表等等,各配置参数详解参考注释:
注意:==我增加了几个实用的可选配置,像生成时覆盖原文件、去除注释、自增主键列、columnOverride 

<!DOCTYPE generatorConfiguration PUBLIC
        "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- MyBatis3Simple风格 -->
    <context id="simple" targetRuntime="MyBatis3Simple">

        <property name="javaFileEncoding" value="UTF-8"/>
        <!--生成mapper.xml时覆盖原文件-->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否。 自动生成注释太啰嗦,可以编码扩展CommentGenerator -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!-- 数据库连接 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://172.17.10.231:3306/ydsx?serverTimezone=UTC"
                        userId="root" password="root">
            <!-- 设置为true就只读取db_book下的表, 否则会优先读取到mysql的user表  -->
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>

        <!-- 生成PO的包名和位置 -->
        <javaModelGenerator targetPackage="com.example.demo27.bean" targetProject="E:/00-workspace-src/practice_springboot/demo27/src/main/java"/>

        <!-- 生成XML映射文件的包名和位置 -->
        <sqlMapGenerator targetPackage="mybatis.mapper" targetProject="E:/00-workspace-src/practice_springboot/demo27/src/main/resources"/>

        <!-- 生成Mapper接口的包名和位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo27.mapper" targetProject="E:/00-workspace-src/practice_springboot/demo27/src/main/java"/>

        <!-- 要生成对应表配置 -->
        <table tableName="tb_user" domainObjectName="TbUser">
            <!-- 自增主键列 -->
            <generatedKey column="id" sqlStatement="MYSQL" identity="true"/>
            <!-- tinyint映射为Integer -->
            <columnOverride column="role" javaType="Integer" jdbcType="TINYINT"/>
        </table>
    </context>
</generatorConfiguration>

MyBatis3Simple风格生成的代码比较精简,看一看UserMapper的接口方法,只有基本的增删改查方法:

public interface UserMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(User record);

    User selectByPrimaryKey(Integer id);

    List<User> selectAll();

    int updateByPrimaryKey(User record);
}

MyBatis3风格
我们再看看MyBatis3风格,只需要将 targetRuntime=“MyBatis3Simple” 修改为 targetRuntime=“MyBatis3”,然后再双击插件的mybatis-generator:generate,就可以看到增加了 “by example” 和 “selective” 方法
 

selective方法:选择性插入或更新,判断PO字段不为空才插入或修改。在只需要插入或修改个别字段值时使用,对应生成的SQL不包括=null的字段,但同样也需要注意,你无法用它将字段设置为null。 
by example方法:这个东西有点小强大,可以动态生成各种查询条件,在后面的接口开发实战中我们再使用。但就是生成的代码有点多,没有实现example代码的复用。对于单表复杂查询喜欢直接SQL的,可以禁用生成example,可以通过table节点的如下配置来指定是否启用。
 

属性

说明

enableSelectByExample

是否启用生成selectByExample

enableDeleteByExample

是否启用生成deleteByExample

enableCountByExample

是否启用生成countByExample

enableUpdateByExample

是否启用生成updateByExample和updateByExampleSelective

MyBatis3DynamicSql风格
只需要将 targetRuntime=“MyBatis3” 修改为 targetRuntime=“MyBatis3DynamicSql”。
生成的代码是全注解风格的,也就不会生成UserMapper.xml和UserExample类,而是新生成了UserDynamicSqlSupport类。

需要增加mybatis-dynamic-sql依赖包:

<!--mybatis-dynamic-sql-->
<dependency>
    <groupId>org.mybatis.dynamic-sql</groupId>
    <artifactId>mybatis-dynamic-sql</artifactId>
    <version>1.1.4</version>
</dependency>

四、Java代码运行方式

除了使用插件运行方式来生成,我们还可以以Java代码方式运行,添加mybatis-generator-core依赖包,如下:

<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.7</version>
</dependency>

添加main方法,如下:

package com.example.demo27;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class MybatisGeneratorRunner {
    public static void main(String[] args) throws XMLParserException, IOException, InvalidConfigurationException, SQLException, InterruptedException {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        // 使用xml配置文件的方式
        File configFile = new File(MybatisGeneratorRunner.class.getClassLoader().getResource("generatorConfig.xml").getPath());
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        // 使用纯Java代码配置的方式, 相当于把 generatorConfig.xml配置的都用java代码配置到config中
//         config = new Configuration();

        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
        System.out.println(warnings);
    }
}


版本1.3.2

第一步

pom.xml文件的build --->plugins 中加入如下<plugin>标签 

  <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
 <!--自动生成配置 如果名字是generatorConfig.xml并且直接放在resources文件夹下可以省略配置-->
                    <!--<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>--> 
                    <configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifacts</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>1.3.2</version>
                    </dependency>
                </dependencies>
            </plugin>

注意:

<configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile>

目录/文件名不要写错

第二步

在工程目录\resources\mybatis-generator\文件夹下创建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>
    <classPathEntry
            location="G:/GreenSoft/maven_repertory/mysql-connector-java-8.0.13.jar"/>
    <context id="my" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="false"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

<!--        注意:connectionURL 中 & 用 ; 替换-->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/hxzy?serverTimezone=UTC"
                        userId="root"
                        password="root"/>

        <javaModelGenerator targetPackage="com.example.demo27d.bean"
                            targetProject="D:/workspace/mult-springboot/demo27d/src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <sqlMapGenerator targetPackage="mybatis.mapper"
                         targetProject="D:/workspace/mult-springboot/demo27d/src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <javaClientGenerator targetPackage="com.example.demo27d.mapper"
                             targetProject="D:/workspace/mult-springboot/demo27d/src/main/java" type="XMLMAPPER">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>


        <table tableName="sys_permission" domainObjectName="SysPermission"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">

        </table>

    </context>
</generatorConfiguration>

第三步测试

 

generatorConfig.xml配置说明


MyBatis Generator的配置文件 generatorConfig.xml 是整个代码自动生成过程中的核心,它定义了如何生成数据库表对应的实体类、映射文件以及DAO接口等。理解和正确配置这个文件是利用MyBatis Generator进行项目开发前的必要步骤。

配置文件结构解读

文件的根元素及其作用
在 generatorConfig.xml 中, <generatorConfiguration> 是根元素,它用于包含所有的配置信息,并且能够指明使用的数据库驱动和MyBatis版本。

各子元素的配置细节
generatorConfig.xml 主要包含以下几个子元素配置:

<classPathEntry> :指定JDBC驱动类库的位置。
<context> :配置生成内容的上下文环境,可以包含多个。
<jdbcConnection> :配置与数据库的连接信息。
<javaModelGenerator> :指定生成实体类的位置和设置。
<sqlMapGenerator> :指定生成映射文件的位置。
<javaClientGenerator> :指定生成DAO接口的位置。
<table> :指定要生成代码的数据库表。
 

 配置内容的详细解析


表格信息的配置
表格信息的配置通常包括表的schema、catalog、表名以及生成模式等。这允许开发者为不同的数据库环境定制代码生成的配置。

<table tableName="user"
       schema="public"
       catalog="mydatabase"
       domainObjectName="User"
       enableCountByExample="false"
       enableUpdateByExample="false"
       enableDeleteByExample="false"
       enableSelectByExample="false"
       selectKeyDatabaseType="INTEGER"/>

在上面的例子中,我们指定了要生成代码的表名为 user ,位于 public schema和 mydatabase catalog中,并且自定义了实体类的名称为 User 。

生成文件的详细配置
生成文件的配置主要是在 <javaModelGenerator> 、 <sqlMapGenerator> 和 <javaClientGenerator> 中进行设置。例如: 

<javaModelGenerator targetPackage="com.example.demo27.model" targetProject="src/main/java"/>
 
<sqlMapGenerator targetPackage="com.example.demo27.mapper" targetProject="src/main/resources"/>
 
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo27.mapper" targetProject="src/main/java"/>

在这些配置中, targetPackage 属性指明了生成文件的包名, targetProject 属性指明了生成文件在项目中的位置。 type 属性在 javaClientGenerator 中通常有三种值: XMLMAPPER 、 ANNOTATEDMAPPER 和 MIXEDMAPPER ,代表使用XML映射文件、注解或者两者混合的方式。

通过这些配置,MyBatis Generator能够知道如何为数据库中的表生成对应的实体类、映射文件和DAO接口,从而帮助开发者提高开发效率,减少重复代码的编写。下面章节将介绍如何设置数据库连接信息,并且展示如何运行MyBatis Generator以生成代码。 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值