使用Java MyBatis的Generator解决数据库表与Java代码的映射问题

1. 引言

在开发过程中,我们经常需要将数据库表的结构映射到Java代码中,方便进行CRUD操作。而手动编写这些代码非常繁琐且容易出错。为了提高开发效率和减少人为错误,可以使用Java MyBatis的Generator工具自动生成数据库表与Java代码的映射关系。

2. 准备工作

在开始使用Java MyBatis的Generator之前,需要进行一些准备工作。

2.1 配置文件

首先,我们需要创建一个配置文件,用于配置Generator的相关参数。在根目录下创建一个名为generatorConfig.xml的配置文件,并填写以下内容:

<!DOCTYPE generatorConfiguration PUBLIC
 "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
 "
<generatorConfiguration>
    <context id="MybatisGenerator" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydatabase"
                        userId="root"
                        password="password">
        </jdbcConnection>
        <javaModelGenerator targetPackage="com.example.entity"
                            targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <sqlMapGenerator targetPackage="com.example.mapper"
                         targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <table tableName="user" domainObjectName="User"
               enableCountByExample="false" enableUpdateByExample="false"
               enableSelectByExample="false" enableDeleteByExample="false"
               enableInsertByExample="false">
            <property name="useActualColumnNames" value="true"/>
            <generatedKey column="id" sqlStatement="JDBC"/>
        </table>
    </context>
</generatorConfiguration>

在上述配置文件中,我们需要注意以下几点:

  • jdbcConnection标签中填写数据库的连接信息,比如connectionURLuserIdpassword
  • javaModelGenerator标签中填写生成Java实体类的目标包名和目标路径;
  • sqlMapGenerator标签中填写生成Mapper接口的目标包名和目标路径;
  • javaClientGenerator标签中填写生成Mapper XML文件的目标包名和目标路径;
  • table标签中填写要映射的数据库表名和Java实体类的类名。

2.2 依赖配置

在项目的pom.xml文件中添加以下依赖:

<dependencies>
    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    <!-- MyBatis Generator -->
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.4.0</version>
    </dependency>
    <!-- MySQL Connector -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.26</version>
    </dependency>
</dependencies>

3. 使用Generator生成代码

当我们完成了上述的准备工作后,就可以使用Generator生成数据库表与Java代码的映射了。

3.1 运行Generator

在项目中创建一个名为Generator的类,用于启动Generator工具。在该类中编写以下代码:

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 Generator {

    public static void main(String[] args) {
        try {
            List<String> warnings = new ArrayList<>();
            ConfigurationParser configurationParser = new ConfigurationParser(warnings);
            Configuration configuration = configurationParser.parse