Mybatis Flex代码生成器详解

 更新时间:2025年11月04日 09:30:33   作者:小林学习编程  
MybatisFlex是一个轻量级、高性能的MyBatis增强框架,支持多种数据库操作和灵活的SQL生成,文章还介绍了MybatisFlex代码生成器,可以通过数据库表快速生成Entity、Mapper、Service和Controller等代码

1、什么是Mybatis Flex

MyBatis-Flex是一个优雅的 MyBatis增强框架

MyBatis-Flex 是一个优雅的 MyBatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。

我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper^亮点 帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性。

总而言之,MyBatis-Flex 能够极大地提高我们的开发效率和开发体验,让我们有更多的时间专注于自己的事情。

MyBatis-Flex特征

他的作用和Mybatis Flex一样,都是对传统操作数据库的Mybatis框架进行增加。

他的三大优势:

1、轻量

除了 MyBatis,没有任何第三方依赖轻依赖、没有任何拦截器,其原理是通过 SqlProvider 的方式实现的轻实现。同时,在执行的过程中,没有任何的 Sql 解析(Parse)轻运行。

这带来了几个好处:

  • 1、极高的性能;
  • 2、极易对代码进行跟踪和调试;
  • 3、更高的把控性。

2、灵活

支持 Entity 的增删改查、以及分页查询的同时,MyBatis-Flex 提供了 Db + Row^灵活 工具,可以无需实体类对数据库进行增删改查以及分页查询。 与此同时,MyBatis-Flex 内置的 QueryWrapper^灵活 可以轻易的帮助我们实现 多表查询链接查询子查询 等等常见的 SQL 场景。

3、强大

支持任意关系型数据库,还可以通过方言持续扩展,同时支持 多(复合)主键逻辑删除乐观锁配置数据脱敏数据审计数据填充 等等功能。

2、 mybatis-flex代码生成器

在 mybatis-flex 中,有了一个名称为 mybatis-flex-codegen 的模块,提供了可以通过数据库表,生成代码的功能。

当我们把数据库表设计完成后, 就可以使用其快速生成 Entity、 Mapper、 Service、 Controller 等产物。

除此之外,我们还可以通过扩展生成更多的产物,文档参考 #添加其他产物的生成

2.1、引入依赖

注意使用的是Springboot3的

<dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-spring-boot3-starter</artifactId>
    <version>1.11.0</version>
</dependency>

还需要引入相关依赖

<!-- 代码生成模块 -->
<dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-codegen</artifactId>
    <version>1.11.0</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>

2.2、开发生成器

在根包下新建 generator 包,新建 MyBatisCodeGenerator 类,编写代码生成器。先从官方复制示例代码,然后按需修改即可。

public class MyBatisCodeGenerator {

    // 需要生成的表名
    private static final String[] TABLE_NAMES = {"user"};

    public static void main(String[] args) {
        // 获取数据源信息
        Dict dict = YamlUtil.loadByPath("application.yml");
        Map<String, Object> dataSourceConfig = dict.getByPath("spring.datasource");
        String url = String.valueOf(dataSourceConfig.get("url"));
        String username = String.valueOf(dataSourceConfig.get("username"));
        String password = String.valueOf(dataSourceConfig.get("password"));
        // 配置数据源
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);

        // 创建配置内容
        GlobalConfig globalConfig = createGlobalConfig();

        // 通过 datasource 和 globalConfig 创建代码生成器
        Generator generator = new Generator(dataSource, globalConfig);

        // 生成代码
        generator.generate();
    }

    // 详细配置见:https://mybatis-flex.com/zh/others/codegen.html
    public static GlobalConfig createGlobalConfig() {
        // 创建配置内容
        GlobalConfig globalConfig = new GlobalConfig();

        // 设置根包,建议先生成到一个临时目录下,生成代码后,再移动到项目目录下
        globalConfig.getPackageConfig()
                .setBasePackage("com.yupi.yuaicodemother.genresult");

        // 设置表前缀和只生成哪些表,setGenerateTable 未配置时,生成所有表
        globalConfig.getStrategyConfig()
                .setGenerateTable(TABLE_NAMES)
                // 设置逻辑删除的默认字段名称
                .setLogicDeleteColumn("isDelete");

        // 设置生成 entity 并启用 Lombok
        globalConfig.enableEntity()
                .setWithLombok(true)
                .setJdkVersion(21);

        // 设置生成 mapper
        globalConfig.enableMapper();
        globalConfig.enableMapperXml();

        // 设置生成 service
        globalConfig.enableService();
        globalConfig.enableServiceImpl();

        // 设置生成 controller
        globalConfig.enableController();

        // 设置生成时间和字符串为空,避免多余的代码改动
        globalConfig.getJavadocConfig()
                .setAuthor("<a href=\"https://github.com/liyupi\">程序员鱼皮</a>")
                .setSince("");
        return globalConfig;
    }
}

上述代码中,我们从配置文件中获取数据库连接信息,用来初始化数据源。然后自定义了一些生成配置,包括:

  • 指定逻辑删除字段中
  • 使用的 JDK 版本
  • 生成的代码放到哪个包(建议选择一个独立的包,不要跟老代码混一起)
  • 要生成哪些文件
  • 生成什么代码注释

2.3、执行代码生成器

查看结果

扩展思路-自定义代码生成:

可以参考 官方文档,通过自定义模板的方式更灵活地控制代码生成的内容,比如设置主键自增策略、增加 Controller 层生成的接口等等。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Security OAuth2认证授权示例详解

    Spring Security OAuth2认证授权示例详解

    这篇文章主要介绍了Spring Security OAuth2认证授权示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 浅谈javap命令拆解字节码文件

    浅谈javap命令拆解字节码文件

    这篇文章主要介绍了拆解字节码文件javap命令,对反编译感兴趣的同学可以参考下
    2021-04-04
  • Java8函数式接口Predicate用法示例详解

    Java8函数式接口Predicate用法示例详解

    这篇文章主要为大家介绍了Java8函数式接口Predicate用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • SpringCloud Eureka服务的基本配置和操作方法

    SpringCloud Eureka服务的基本配置和操作方法

    Eureka是Netflix开源的一个基于REST的服务治理框架,主要用于实现微服务架构中的服务注册与发现,Eureka是Netflix开源的服务发现框架,用于在分布式系统中实现服务的自动注册与发现,本文介绍SpringCloud Eureka服务的基本配置和操作方法,感兴趣的朋友一起看看吧
    2023-12-12
  • SpringMVC的处理器拦截器HandlerInterceptor详解

    SpringMVC的处理器拦截器HandlerInterceptor详解

    这篇文章主要介绍了SpringMVC的处理器拦截器HandlerInterceptor详解,SpringWebMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于处理器进行预处理和后处理,需要的朋友可以参考下
    2024-01-01
  • Spring Cloud Gateway内置的断言和过滤器作用说明

    Spring Cloud Gateway内置的断言和过滤器作用说明

    这篇文章主要介绍了Spring Cloud Gateway内置的断言和过滤器作用说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • java中List集合去重常见的几种方法总结

    java中List集合去重常见的几种方法总结

    在Java编程中List集合是一种常用的数据结构,它允许我们存储和操作一组有序的对象,这篇文章主要给大家介绍了关于java中List集合去重常见的几种方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-07-07
  • Spring工程中集成多个redis数据源的思路详解

    Spring工程中集成多个redis数据源的思路详解

    Spring项目集成双Redis数据源需配置两个连接工厂与RedisTemplate,通过@Primary指定默认Bean,@Qualifier注入特定Bean,支持集群环境,本文给大家介绍Spring工程中集成多个redis数据源的相关知识,感兴趣的朋友一起看看吧
    2025-07-07
  • 深入理解LinkedHashSet集合的底层机制

    深入理解LinkedHashSet集合的底层机制

    这篇文章主要介绍了LinkedHashSet的底层机制详解,LinkedHashSet根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序, 这使得元素看起来是以插入顺序保存的,需要的朋友可以参考下
    2023-10-10
  • 关于SpingMVC的<context:component-scan>包扫描踩坑记录

    关于SpingMVC的<context:component-scan>包扫描踩坑记录

    这篇文章主要介绍了关于SpingMVC的<context:component-scan>包扫描踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论