Mybatis-plus代码生成器

news2024/11/23 15:43:59

官网:MyBatis-Plus (baomidou.com)

顾名思义,就是它为你生成代码,这里可以为你生成Entity、Mapper、MapperXML、Service、controller等各个模块的代码,极大的提升开发效率

环境:mysql8.0.24、mybatis-plus3.5.3.1、springboot3.1.0

代码生成器(新),提供了两种使用方式:快速生成、交互式生成。
由于是新版本,有很多没有解释清楚的地方,容易踩坑:

1、fileOverride已被弃用

10:03:20.036 [main] WARN com.baomidou.mybatisplus.generator.config.GlobalConfig -- 全局覆盖已有文件的配置已失效,已迁移到策略配置中

2、模板引擎的依赖

3、swagger模式版本问题

1、快速生成

package com.gc.util;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.sql.Types;
import java.util.Collections;

public class Generator2 {
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql:******", "root", "1234")
                .globalConfig(builder -> {
                    builder.author("baomidou") // 设置作者
//                            .enableSwagger() // 开启 swagger 模式
//                            .fileOverride() // 覆盖已生成文件
                            .outputDir("F:\\ideagzkj\\SpringbootDemo\\MybatisPlus\\src\\main\\java"); // 指定输出目录
                })
                .dataSourceConfig(builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
                    int typeCode = metaInfo.getJdbcType().TYPE_CODE;
                    if (typeCode == Types.SMALLINT) {
                        // 自定义类型转换
                        return DbColumnType.INTEGER;
                    }
                    return typeRegistry.getColumnType(metaInfo);

                }))
                .packageConfig(builder -> {
                    builder.parent("com.gc") // 设置父包名
                            .moduleName("test") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, "F:\\ideagzkj\\SpringbootDemo\\MybatisPlus\\src\\main\\resources\\mapper")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude("user","student") // 设置需要生成的表名
//                            .addTablePrefix("u_", "s_") // 设置过滤表前缀
                                ;
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }

}
  • 由于使用的Freemarker引擎模板,所以要引入该模板依赖
       <!--代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>

可以看到上面我给 enableSwagger注释了,因为它默认生成的是swagger2的注解,我的是swagger3版本。
fileOverride 一定要注释掉,不然可能执行不成功,出现上面写的警告

2、交互式生成 

package com.gc.util;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.fill.Column;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Generator {
    private static final DataSourceConfig.Builder DATA_SOURCE_CONFIG = new DataSourceConfig.Builder("jdbc:mysql:******","root","1234");

    public static void main(String[] args) {
        FastAutoGenerator.create(DATA_SOURCE_CONFIG)
                // 全局配置
//                .globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称?")))
                .globalConfig((scanner, builder) -> builder
                        .author(scanner.apply("请输入作者名称?"))
                        .outputDir("F:\\ideagzkj\\SpringbootDemo\\MybatisPlus\\src\\main\\java\\com\\gc")
                )
                // 包配置
                .packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名?")))
                // 策略配置
                .strategyConfig((scanner, builder) -> builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
                        .controllerBuilder().enableRestStyle().enableHyphenStyle()
                        .entityBuilder().enableLombok().addTableFills(
                                new Column("create_time", FieldFill.INSERT)
                        ).build())
                /*
                    模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker
                   .templateEngine(new BeetlTemplateEngine())
                   .templateEngine(new FreemarkerTemplateEngine())
                 */
                .execute();
    }
    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }
}

我修改了一下官网提供的代码,因为控制台输入包名后,生成文件没有到当前工作目录,所以这里指定了一下当前工作目录 

  • 这里采用的默认Velocity模板引擎
         <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
        </dependency>

 总结

这是官网提供的两种最基础生成方式!
第一种将Entity、Mapper、MapperXML、Service、controller都生成了但是没有采用lombok方式。

第二种只生成了Entity、Mapper、Service、controller采用了lombok,但是没有生成MapperXML文件。

当然可以通过配置更加完善优化,可以去官网查看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622753.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<<Linux多线程服务端编程>>学习之栏1————线程安全的对象生命期管理

线程安全的对象生命期管理 此章节开头的前两句话&#xff0c;把我点醒&#xff0c;原来思考功力可以这么深厚&#xff01;如下&#xff1a; 第一句话&#xff1a; 编写线程安全的类不是难事&#xff0c; 用同步原语保护内部状态即可&#xff1b; 第二句话&#xff1a; 但是对…

【论文阅读】ControlNet

简介 目标&#xff1a;加入额外的条件&#xff08;例如边缘图像&#xff0c;深度图像&#xff09;控制生成的图像 现有挑战 特定领域上的数据较少&#xff0c;而预训练模型很大&#xff0c;很容易出现过拟合的情况。在资源有限的情况下&#xff0c;只能选择pretrain- finetun…

传统工业制造企业如何实现数字化转型?

传统工业制造企业如何实现数字化转型&#xff0c;以数字驱动、实现高价值管理&#xff1f; 传统企业实现数字化转型是一条很漫长但不得不走的道路&#xff0c;看到这个问题下有很多专业人士对传统企业如何做数字化转型都提出了专业的见解&#xff0c;所以这篇就以传统制造业为…

用ChatGPT来写高考作文,看看效果!

又是一年高考日&#xff0c;今天高考作文题目一出来&#xff0c;很多人第一时间就用AI进行写作&#xff0c;我这边也用gpt3和4分别生成了一篇文章&#xff0c;没有给他投喂范文&#xff0c;把要求和题目的prompt给它&#xff0c;让它分析和写作&#xff0c;来看看效果吧。 GPT4…

学习态度记录JRebel本地验证

学习态度记录JRebel本地验证 网上有两种方式。 1、直接使用其他同学提供好的远程服务器验证地址(可自行搜索) 2、设置本地反向代理&#xff0c;激活JRebel ps&#xff1a;我的IDEA升级到2023.1.2后无法使用第一种方式了。搜了半天网上都是基于windows环境的教程解说&#xff0…

html 原生js手写树 仿照antd 样式

效果如图 <!doctype html> <html><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

百度Apollo视频学习笔记

APOLLO视频学习笔记 一、总览 无人驾驶车的运作方式 五个核心部件&#xff1a; 计算机视觉&#xff1a;弄清楚周围的世界是怎样的传感器融合&#xff1a; 合并来自其他传感器的数据&#xff0c;如激光和雷达&#xff0c;更加深入了了解我们周围的环境定位&#xff1a;精确地…

一级建造师执业资格考试--工程法规--速学36记--联想法

第一记&#xff1a;法的效力层级 第二记&#xff1a;法人的分类 【速记方法】口诀&#xff1a;赚钱营利和特别 关键词&#xff1a;营利、特别 【速记内容】 1、营利法人:以取得利润并分配给股东等出资人为目的成立的法人,为营利法人; 如有限责任公司、股份有限公司。经依法登记…

什么牌子电容笔性价比高?iPad触屏笔推荐

电容笔已经成为日常生活中不可或缺的一部分。它可以用于书写&#xff0c;绘画&#xff0c;甚至玩游戏。使用电容笔可以代替传统无纸化书写&#xff0c;提高工作效率。市面上有许多不同价格的电容笔品牌可供选择。本文将介绍四款性价比高的平替电容笔&#xff0c;有需要入手的小…

常用的三种拖拽方法(内置方法 + 接口 + Event Trigger组件)

前言 在Unity中实现拖拽的方法有多种&#xff0c;以下是几种常见的方法和它们的优缺点&#xff1a; Input.GetMouseButtonDown Input.GetMouseButtonDown 方法可以监测用户鼠标按键的点击事件&#xff0c;通过检测鼠标按钮的状态来实现拖拽效果。用户通过鼠标进行拖拽操作。…

Web基本概念

一、前言 World Wide Web的简称&#xff0c;是一个由许多互相链接的超文本组成的系统&#xff0c;通过互联网访问 &#xff08;为用户提供信息&#xff09; 静态网页 仅适用于不能经常更改内容的网页&#xff1b; 动态网页 网络编程技术创建的页面&#xff1b;通过在传统的静态…

MongoDB安装与使用

目录 一、MongoDB介绍与安装 什么是MongoDB 为什么要用MongoDB MongoDB下载 MongoDB安装完成 二、MongoDB Compass MongoDB Compass使用 三、使用mongoose连接数据库 使用MongoDB Compass 创建数据库 使用mongoose 连接数据库 每日一课&#xff1a;MongoDB 常用命令…

Vue项目打包dist目录介绍

如下 CSS目录&#xff1a; ① .css文件是项目要用到的css文件,当你做webpack打包的时候&#xff0c;会把所有的css样式打包到这里 ② .css.map文件是一个Source map文件&#xff0c;Source map就是一个信息文件&#xff0c;里面储存着位置信息。也就是说&#xff0c;转换后的代…

ChatGPT扩展系列之使用pandora本地搭建ChatGPT

ChatGPT扩展系列之使用pandora本地搭建ChatGPT 1. 为什么要本地搭建 主要解决使用上的几个痛点,我们可以看一下下面就是我们最常遇到的几个问题,这里我们重点提一下就是我们本地搭建好了之后,我们获取Access Token,这个Token的有效期长达14天,也就是这14天中,我们都不需…

【沐风老师】3DMAX径向对称插件使用方法应解

3DMAX径向对称插件使用教程 3DMAX径向对称插件&#xff0c;允许你对径向结构建模并查看最终结果。它的功能类似于3dMax自带的“对称”修改器&#xff0c;但它可以在三个轴的任意角度径向对象&#xff0c;这可以创造出很多我们意想不到的建模艺术效果&#xff0c;也可以理解它是…

【前端 - HTML】第 6 课 - 表单标签

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、表单标签 2.1、input 标签基本使用 2.2、input 标签占位文本 2.3、单选框 radio 2.4、上传文件 2.5、多选框 …

Vue.js中的动态组件和异步组件

Vue.js中的动态组件和异步组件 在Vue.js中&#xff0c;动态组件和异步组件是两个常用的技术&#xff0c;用于处理动态加载和渲染组件的需求。虽然它们都可以实现动态加载和渲染组件的功能&#xff0c;但它们的实现方式和使用方法有所不同。本文将详细介绍Vue.js中的动态组件和…

短视频账号矩阵系统技术开发难度之.框架底层逻辑

申请流程&#xff1a;注册官方开放平台账号----申请服务商-----关联应用----申请权限-----等待审核通过 接入开发------开发功能列表&#xff1a; 数据归纳箱&#xff08;账号数据对比概览内含视频总数、播放总数、点赞总数、分享总数、粉丝总数数据统计概览统计&#xff09;…

CMU15-445 2022 Fall 通关记录 —— Project 0

Project 0 Project #0 - C Primer | CMU 15-445/645 :: Intro to Database Systems (Fall 2022) — 项目 #0 - C 入门 | CMU 15-445/645 :: 数据库系统简介&#xff08;2022 年秋季&#xff09; 前期准备 为完成该项目做的一些准备&#xff1a; 创建个人项目FarewellYi/BusT…

【半监督医学图像分割 2023 CVPR】BCP

【半监督医学图像分割 2023 CVPR】BCP 论文题目&#xff1a;Bidirectional Copy-Paste for Semi-Supervised Medical Image Segmentation 中文题目&#xff1a;双向复制粘贴半监督医学图像分割 论文链接&#xff1a;https://arxiv.org/abs/2305.00673 论文代码&#xff1a;http…