Mybatis代码生成javaConfig配置

**

Mybatis代码生成javaConfig配置

**
关于mybatis的代码生成已经有多不胜数的文章和例子,本文主要介绍通过javaConfig的方式替代xml的方式配置,从而以接口的形式完成参数化的代码生成。
一、环境
Idea, JDK8, springboot2.2.2, mysql8.0.13
关键包及版本:
关键包及版本
Mysql驱动: mysql-connector-java-8.0.13.jar

二、重点模块
1、New一个springboot基础工程,创建相关文件夹,大致结构如下
项目结构
2、重点文件GeneratorConfig及方法

package com.tool.toolbox.generator;

import com.tool.toolbox.dto.GeneratorDto;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.*;
import org.mybatis.generator.exception.InvalidConfigurationException;
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;

/**
 * @author Administrator
 */
public class GeneratorConfig {

    /**模板,暂时不需要*/
    private boolean exampleTf = false;
    /**静态地址,非项目结构变更不做修改*/
    private static String sysUrl = System.getProperty("user.dir")
            .concat(File.separator).concat("src")
            .concat(File.separator).concat("main")
            .concat(File.separator).concat("resources");

    public String generatorConfig(GeneratorDto generatorDto) {
        String classpathEntry;
        if(generatorDto.getDriverClass().contains("mysql")){
            classpathEntry  = sysUrl + File.separator + "lib" + File.separator + "mysql-connector-java-8.0.13.jar";
        }else
            throw new IllegalStateException("Unexpected value: " + generatorDto.getDriverClass());
        Context context = new Context(ModelType.CONDITIONAL);
        context.setTargetRuntime("MyBatis3");
        context.setId("mysql");

        CommentGeneratorConfiguration commentGeneratorConfiguration = new CommentGeneratorConfiguration();
        commentGeneratorConfiguration.addProperty("suppressDate","true");
        commentGeneratorConfiguration.addProperty("suppressAllComments","true");

        /*数据库链接URL,用户名、密码 */
        JDBCConnectionConfiguration jdbcConnectionConfiguration = new JDBCConnectionConfiguration();
        jdbcConnectionConfiguration.setDriverClass(generatorDto.getDriverClass());
        jdbcConnectionConfiguration.setConnectionURL(generatorDto.getConnectionURL());
        jdbcConnectionConfiguration.setUserId(generatorDto.getUsername());
        jdbcConnectionConfiguration.setPassword(generatorDto.getPassword());

        JavaTypeResolverConfiguration javaTypeResolverConfiguration = new JavaTypeResolverConfiguration();
        javaTypeResolverConfiguration.addProperty("forceBigDecimals","false");

        /*生成模型的包名和位置*/
        JavaModelGeneratorConfiguration javaModelGeneratorConfiguration = new JavaModelGeneratorConfiguration();
        javaModelGeneratorConfiguration.setTargetPackage("tamp");
        javaModelGeneratorConfiguration.setTargetProject(sysUrl);
        javaModelGeneratorConfiguration.addProperty("enableSubPackages","true");
        javaModelGeneratorConfiguration.addProperty("trimStrings","true");

        /*生成映射文件的包名和位置*/
        SqlMapGeneratorConfiguration sqlMapGeneratorConfiguration = new SqlMapGeneratorConfiguration();
        sqlMapGeneratorConfiguration.setTargetPackage("tamp");
        sqlMapGeneratorConfiguration.setTargetProject(sysUrl);
        sqlMapGeneratorConfiguration.addProperty("enableSubPackages","true");

        /*生成DAO的包名和位置*/
        JavaClientGeneratorConfiguration javaClientGeneratorConfiguration = new JavaClientGeneratorConfiguration();
        javaClientGeneratorConfiguration.setConfigurationType("XMLMAPPER");
        javaClientGeneratorConfiguration.setTargetPackage("tamp");
        javaClientGeneratorConfiguration.setTargetProject(sysUrl);
        javaClientGeneratorConfiguration.addProperty("enableSubPackages","true");

        PluginConfiguration pluginConfiguration = new PluginConfiguration();
        switch (generatorDto.getType()){
            case 0: pluginConfiguration.setConfigurationType("com.tool.toolbox.generator.LombokPlugin");break;
            case 1: pluginConfiguration.setConfigurationType("com.tool.toolbox.generator.CommentPlugin");break;
        }

        context.addPluginConfiguration(pluginConfiguration);

        context.addProperty("javaFileEncoding","UTF-8");
        context.addProperty("javaFormatter","org.mybatis.generator.api.dom.DefaultJavaFormatter");
        context.addProperty("xmlFormatter","org.mybatis.generator.api.dom.DefaultXmlFormatter");
        context.addProperty("beginningDelimiter","`");
        context.addProperty("endingDelimiter","`");

        context.setCommentGeneratorConfiguration(commentGeneratorConfiguration);
        context.setJdbcConnectionConfiguration(jdbcConnectionConfiguration);
        context.setJavaTypeResolverConfiguration(javaTypeResolverConfiguration);
        context.setJavaModelGeneratorConfiguration(javaModelGeneratorConfiguration);
        context.setSqlMapGeneratorConfiguration(sqlMapGeneratorConfiguration);
        context.setJavaClientGeneratorConfiguration(javaClientGeneratorConfiguration);


        generatorDto.getTableList().forEach(tableEntity->{
            TableConfiguration tableConfiguration = new TableConfiguration(context);
            tableConfiguration.setTableName(tableEntity.getTableName());
            tableConfiguration.setDomainObjectName(tableEntity.getDomainObjectName());
            tableConfiguration.setCountByExampleStatementEnabled(exampleTf);
            tableConfiguration.setUpdateByExampleStatementEnabled(exampleTf);
            tableConfiguration.setSelectByExampleStatementEnabled(exampleTf);
            tableConfiguration.setSelectByExampleStatementEnabled(exampleTf);
            tableConfiguration.setDeleteByExampleStatementEnabled(exampleTf);
            context.addTableConfiguration(tableConfiguration);
        });

        Configuration config = new Configuration();
        config.addClasspathEntry(classpathEntry);
        config.addContext(context);

        DefaultShellCallback callback = new DefaultShellCallback(true);
        MyBatisGenerator myBatisGenerator;
        try {
            myBatisGenerator = new MyBatisGenerator(config, callback, new ArrayList<>(0));
            myBatisGenerator.generate(null);
            return sysUrl + File.separator + "tamp";
        } catch (InvalidConfigurationException | InterruptedException | IOException | SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}


方法解析1
方法开始,我们就需要指定本次生成所用的驱动包,需要集成可在此处做分支语句。(注:此处的sysUrl适用本项目结构,复用请当心)
方法解析2
创建一个上下文容器替代xml文件(这是核心操作)
方法解析3
一些必须项,略过(这里面聊起来就太多了)
方法解析4
这里除了mybatis的传统注释插件,还有一份Lombok的注释插件(个人喜好使用)
方法解析5
将必须的部件全部放入上下文容器中(到此一个xml文件就已经有了)
方法解析6
可能我们一次生成好多张表,于是有了这里的循环。
方法解析7
直接调用mybatis逆向工程来生成文件(此处返回了一个url,在后面做打包下载的)
三、插话
本文只是用作交流,算是自己动手的一份总结,或有不简洁、不透彻的地方,请适度吐槽。

四、基础模块
创建 GeneratorDto
参数dto
创建GeneratorService,并创建唯一的方法born
(从yml文件读取的dirverClass,connectionURL,username,password;文件下载的工具类FileUtils我认为是个常规操作,本次不做展开)
实现类主要方法

创建GeneratorController
控制器代码

五、效果展示
运行项目,浏览器访问
localhost:8080/generator/born?tableNames=表名1,表名2
结果如下:
运行结果
六、结语

附上项目demo
https://github.com/zhpngpeng/toolbox.git

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MyBatis 提供了一个名为 MyBatis Generator 的代码生成器,可以根据数据库表结构自动生成对应的 Java 代码。以下是使用 MyBatis Generator 生成 Java 代码的步骤: 1. 添加 MyBatis Generator 插件依赖 ```xml <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.4.0</version> </dependency> ``` 2. 编写 MyBatis Generator 配置文件 在项目根目录下创建一个名为 `generatorConfig.xml` 的 XML 配置文件,定义要生成的 Java 代码的相关配置,例如数据库连接信息、要生成的表、生成的 Java 类名、生成的包名等。 ```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="MyBatis3"> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="123456"> </jdbcConnection> <javaModelGenerator targetPackage="com.example.model" targetProject="./src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <sqlMapGenerator targetPackage="com.example.mapper" targetProject="./src/main/resources"> <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"/> </context> </generatorConfiguration> ``` 上面的示例配置文件定义了一个名为 `mysql` 的上下文,指定了数据库连接信息、生成的 Java 模型类和映射文件的包名和输出路径、生成的 DAO 接口的包名和输出路径,以及要生成的表名和对应的 Java 类名。 3. 运行 MyBatis Generator 在 Maven 项目中,可以使用 Maven 插件来运行 MyBatis Generator。在项目根目录下的 `pom.xml` 文件中添加如下配置: ```xml <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.0</version> <configuration> <configurationFile>generatorConfig.xml</configurationFile> <overwrite>true</overwrite> <verbose>true</verbose> </configuration> </plugin> ``` 然后在命令行中执行以下命令: ``` mvn mybatis-generator:generate ``` MyBatis Generator 将会根据配置文件自动生成 Java 代码、映射文件和 DAO 接口。生成的代码将会保存在 `target/generated-sources` 目录下。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值