mybatis-plus代码生成器(+24篇MySql/MyBatis-Plus文章)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: mybatis-plus代码生成器(+24篇MySql/MyBatis-Plus文章)

一、新版代码生成器

1、项目案例

案例地址

https://download.csdn.net/download/weixin_44624117/68253214

2、需要更新位置

2.1 数据库连接信息

<1> 数据库连接信息 ======================================
String url = "jdbc:mysql://127.0.0.1:3306/test";
String username = "lydms";
String password = "test01";

2.2 代码生成位置

<2> 代码生成位置 ==============================================
  .outputDir("D://generator/test"); // 指定输出目录

2.3包名、项目名、mapper路径

<3> 包名、项目名、mapper路径 ==============================================
builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名
.moduleName("system") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://generator/test/mapper")); // 设置mapperXml生成路径

2.4 生成的表名

<4> 生成的表名  ======================================================
builder.addInclude("lydms_test") // 设置需要生成的表名

3、项目目录结构

  1. 数据库配置(DataSourceConfig)
  2. 全局配置(GlobalConfig)
  3. 包配置(PackageConfig)
  4. 模板配置(TemplateConfig)
  5. 注入配置(InjectionConfig)
  6. 策略配置(StrategyConfig)
    6.1 Entity 策略配置
    6.2 Controller 策略配置
    6.3 Service 策略配置
    6.4 Mapper 策略配置

4、完整代码

package com.baomidou.mybatisplus.generator.samples;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.sql.SQLException;
import java.util.Collections;
/**
 * 快速生成
 *
 * @author lydsm
 * @since 2021-12-21
 */
public class FastAutoGeneratorTest {
    /**
     * 执行 run
     */
    public static void main(String[] args) throws SQLException {
//        <1> 数据库连接信息 ==============================================
        String url = "jdbc:mysql://127.0.0.1:3306/test";
        String username = "lydms";
        String password = "test01";
        FastAutoGenerator.create(url, username, password)
//                1.全局配置
                .globalConfig(builder -> {
                    builder
                            .author("lydms") // 设置作者
//                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
//                            <2> 代码生成位置 ==============================================
                            .outputDir("/Users/mlamp/IdeaProjects/generator/auto-mybatis-new/src/main/java/com/baomidou/mybatisplus/generator/test"); // 指定输出目录
                })
//                2.包配置(PackageConfig)
                .packageConfig(builder -> {
//                    <3> 包名、项目名、mapper路径 ==============================================
                    builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名
                            .moduleName("system") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "/Users/mlamp/IdeaProjects/generator/auto-mybatis-new/src/main/resources/mapper")); // 设置mapperXml生成路径
                })
//                3.模板配置(TemplateConfig)
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
//                4.注入配置(InjectionConfig)
//                .injectionConfig(
//                        builder -> {
//                            builder.customMap(Collections.singletonMap("test", "baomidou"));
//                        }
//                )
//                5.策略配置(StrategyConfig)
                .strategyConfig(builder -> {
//                    <4> 生成的表名  ======================================================
                    builder.addInclude("lydms_test") // 设置需要生成的表名
//                    5.1 Entity 策略配置
                            .entityBuilder()
                            .enableLombok() //开启 lombok 模型
                            .enableTableFieldAnnotation()   //开启生成实体时生成字段注解
                            .naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略
                            .columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略
//                    5.2 Controller 策略配置
                            .controllerBuilder()
                            .enableRestStyle()  //开启生成@RestController 控制器
//                    5.3 Service 策略配置
                            .serviceBuilder()
//                    5.4 Mapper 策略配置
                            .mapperBuilder()
                            .enableBaseResultMap();  //启用 BaseResultMap 生成
//                            .enableBaseColumnList();    //启用 BaseColumnList
                })
                .execute();
    }
}

二、新版自定义模板生成(从代码角度指定生成样例)

1、项目案例

案例地址

https://download.csdn.net/download/weixin_44624117/68977723

2、原理

其生成是取的resource中的模板进行生成的。

指定enableLombok() 模型生成的注解的类型

生成的文件

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("lydms_test_conf")
public class LydmsTestConf {
    @TableId(value = "id", type = IdType.AUTO)
    private String id;
    @TableField("conf_id")
    private String confId;
    @TableField("conf_value")
    private String confValue;
    @TableField("create_time")
    private String createTime;
    @TableField("update_time")
    private String updateTime;
}

三、旧版代码生成器

1、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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.lydms</groupId>
    <artifactId>auto-mybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>auto-mybatis</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency> <!--mybatis-plus的springboot支持-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency> <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2、执行文件代码

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class MysqlGenerator {
    /**
     * 读取控制台内容
     *
     * @param tip
     * @return
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }
    /**
     * RUN THIS
     *
     * @param args
     */
    public static void main(String[] args) {
// 代码生成器
        AutoGenerator mpg = new AutoGenerator();
// 全局配置 1、代码路径(setAuthor、setOutputDir)
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/auto-mybatis/src/main/java");
        gc.setAuthor("lydms");
        gc.setOpen(false);
        mpg.setGlobalConfig(gc);
// 数据源配置 2、数据库连接信息
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://10.128.99.02:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8");
// dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        mpg.setDataSource(dsc);
// 包配置 3、模块名
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(scanner("模块名"));
        pc.setParent("com.lydms.automybatis");
        mpg.setPackageInfo(pc);
// 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
// to do nothing
            }
        };
        List<FileOutConfig> focList = new ArrayList<>();
        focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
            @Override
            public String outputFile(TableInfo tableInfo) {
// 自定义输入文件名称
                return projectPath + "/auto-mybatis/src/main/resources/mapper/" + pc.getModuleName()
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        mpg.setTemplate(new TemplateConfig().setXml(null));
// 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//strategy.setSuperEntityClass("com.baomidou.mybatisplus.samples.generator.common.BaseE ntity");
        strategy.setEntityLombokModel(true);
//strategy.setSuperControllerClass("com.baomidou.mybatisplus.samples.generator.common.B aseController");
        strategy.setInclude(scanner("表名"));
        strategy.setSuperEntityColumns("id");
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix(pc.getModuleName() + "_");
        mpg.setStrategy(strategy);
// 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}

3、需要修改的位置

一共需要修改三个位置。

  1. 代码路径
// 全局配置 1、代码路径(setAuthor、setOutputDir)
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/auto-mybatis/src/main/java");
        gc.setAuthor("lydms");
        gc.setOpen(false);
        mpg.setGlobalConfig(gc);
  1. 数据库连接信息(数据库连接地址和账号密码)
// 数据源配置 2、数据库连接信息
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://10.128.99.02:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        mpg.setDataSource(dsc);
  1. 模块名称
// 包配置 3、模块名
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(scanner("模块名"));
        pc.setParent("com.lydms.automybatis");
        mpg.setPackageInfo(pc);

4、各配置与项目位置关系

5、测试

启动之前项目目录结构:

需要输入模块名和数据库表名:

请输入模块名:
test
请输入表名:
account
15:01:53.868 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================准备生成文件...==========================

生成的文件结果:

6、项目源码包

源码

https://download.csdn.net/download/weixin_44624117/20450700

四、IDEA代码生成器

1、快速使用

生成文件

2、参数解析

  • Comment
  • toString/hashCode/equals
  • Lombok
  • Actual Column
  • Actual Column Annotation
  • JSR310: Date API
  • Model
  • Model

是否添加Model文件

  • Comment

未添加:

/**
 * @TableName my_user
 */
@TableName(value ="my_user")
public class MyUser implements Serializable {
    private Integer id;
    private String name;
}

添加后:

/**
 * 用户表
 * @TableName my_user
 */
@TableName(value ="my_user")
public class MyUser implements Serializable {
    /**
     * ID
     */
    private Integer id;
    /**
     * 名称
     */
    private String name;
}
  • toString/hashCode/equals

  • Lombok

增加Lombok相关配置

  • Actual Column
<resultMap id="BaseResultMap" type="generator.domain.MyUser">
        <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="update_time" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
public class MyUser implements Serializable {
    /**
     * 创建时间
     */
    private Date create_time;
    /**
     * 更新时间
     */
    private Date update_time;
}
  • Actual Column Annotation
<resultMap id="BaseResultMap" type="generator.domain.MyUser">
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
public class MyUser implements Serializable {
    /**
     * 创建时间
     */
    @TableField(value = "create_time")
    private Date createTime;
    /**
     * 更新时间
     */
    @TableField(value = "update_time")
    private Date updateTime;
}
  • JSR310: Date API

Date转为LocalDateTime

/**
     * 创建时间
     */
    @TableField(value = "create_time")
    private LocalDateTime createTime;
    /**
     * 更新时间
     */
    @TableField(value = "update_time")
    private LocalDateTime updateTime;
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
3月前
|
SQL 缓存 Java
Mybatis及MybatisPlus
MyBatis 是一款优秀的持久层框架,支持自定义 SQL、存储过程及高级映射。其系统架构通过 mybatis-config.xml 配置全局信息,结合 mapper.xml 映射 SQL 语句,构建 SqlSessionFactory 并创建 SqlSession 操作数据库。MyBatis 底层通过 Executor 执行器和 Mapped Statement 对象实现 SQL 的输入输出映射与执行。支持复杂结果集映射,
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
1540 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
存储 缓存 关系型数据库
【MySQL调优】如何进行MySQL调优?一篇文章就够了!
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
【MySQL调优】如何进行MySQL调优?一篇文章就够了!
|
12月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
2329 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
12月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
261 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
12月前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
621 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
432 3
|
Java 关系型数据库 数据库连接

推荐镜像

更多