MyBatis Plus 代码生成器

news2024/10/7 8:25:33

一、引入POM依赖

<dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-boot-starter</artifactId>
     <version>3.5.3.1</version>
 </dependency>
 <dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-generator</artifactId>
     <version>3.5.3.1</version>
 </dependency>
 <dependency>
     <groupId>org.apache.velocity</groupId>
     <artifactId>velocity-engine-core</artifactId>
     <version>2.3</version>
 </dependency>
 <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <scope>runtime</scope>
     <version>8.0.30</version>
 </dependency>

二、编写代码

2.1、官方文档

mybatis plus 代码生成器官方文档

2.2、编写代码

提供直接可以的代码,额外需要增加配置参考官方文档即可

package com.xx;


import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import com.xx.common.BaseEntity;

import java.util.Collections;

/**
 * @author aqi
 */
public class CodeGenerator {

    public static void main(String[] args) {
        AutoGenerator generator = new AutoGenerator(dataSourceConfig());
        generator
                .global(globalConfig())
                .packageInfo(packageConfig())
                .strategy(strategyConfig()).execute();
    }

    private static DataSourceConfig dataSourceConfig() {
        return new DataSourceConfig
                .Builder("jdbc:mysql://127.0.0.1:3306/demo?serverTimezone=GMT%2b8&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false","root","root")
                .dbQuery(new MySqlQuery())
                .build();
    }

    /**
     * 全局配置
     *
     * @return GlobalConfig
     */
    private static GlobalConfig globalConfig() {
        return new GlobalConfig.Builder()
                // 指定输出目录
                .outputDir(System.getProperty("user.dir") + "\\src\\main\\java")
                // 作者名
                .author("aqi")
                // 开启 swagger 模式
                .enableSwagger()
                // 禁止打开目录
                .disableOpenDir()
                .build();
    }

    /**
     * 包配置
     *
     * @return PackageConfig
     */
    private static PackageConfig packageConfig() {
        return new PackageConfig.Builder()
                .parent("com.xx.demo")
//                .moduleName("demo")
                .entity("entity")
                .service("service")
                .serviceImpl("service.impl")
                .mapper("mapper")
                .xml("mapper.xml")
                .controller("controller")
                .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "\\src\\main\\resources\\mapper"))
                .build();
    }

    /**
     * 策略配置
     *
     * @return StrategyConfig
     */
    private static StrategyConfig strategyConfig() {
        return new StrategyConfig.Builder()
                .disableSqlFilter()
                .addInclude("airlines_info")

                // entity文件策略
                .entityBuilder()
                // 设置父类
                .superClass(BaseEntity.class)
                // 开启 lombok 模型
                .enableLombok()
                // 添加父类公共字段(这些字段将不在实体中生成)
                .addSuperEntityColumns("create_time", "update_time")
                // 全局主键类型
                .idType(IdType.AUTO)
                // 添加表字段填充
//                .addTableFills(new Column("create_time", FieldFill.INSERT))
//                .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
                // 逻辑删除字段名(数据库)
                .logicDeleteColumnName("deleted")

                // controller文件策略
                .controllerBuilder()
                .enableRestStyle()

                // service文件策略
                .serviceBuilder()
                .formatServiceFileName("%sService")
                .build();
    }
}

三、使用MybatisX生成代码

3.1、安装MybatisX插件

在这里插入图片描述

3.2、使用idea配置Database

在这里插入图片描述

3.3、使用生成代码

3.3.1、选择需要生成代码的表

在这里插入图片描述

3.3.2、配置代码生成路径、包名

在这里插入图片描述

配置项说明
module path代码生成模块
base package包路径
encoding文件编码格式
superClass生成实体类集成的父类
base path根路径,默认不需要修改
ignore field prefix忽略的字段前缀
ignore table prefix忽略的表前缀
relative package实体类所在包的名称
ignore field suffix忽略的字段后缀
ignore table suffix忽略的表后缀
extra class suffix增加实体类后缀
class name strategy类名生成测类额,camel:驼峰,same as tablename:和表名一样,默认为camel就可以
tableName带生成代码的表名
className生成的类名,可以直接修改

3.3.3、配置代码生成使用的模板

在这里插入图片描述

配置项说明
none不使用mybatis plus的模板
Mybatis-Plus 3使用Mybatis plus 3版本的模板
Mybatis-Plus 2使用Mybatis plus 2版本的模板
JPAJPA模板
Comment增加表和字段注释,增加主键注解,建议勾选
toString/hashCode/equals生成toString/hashCode/equals方法,不推荐开启,直接使用Lombok即可
Lombok使用Lombok注解
Actual Column实体名称和表字段名称保持一致
Actual Column Annotation上面勾选了Mybatis-Plus 3这项配置没有作用
JSR310:Date API使用新的时间类,不开启datetime实体类映射为Date,开启之后映射为LocalDateTime
Model是否生成实体类
custom-model-swagger生成swagger模板的字段注释,并且还会按照字段长度生成jsr303的字段校验注解
default-all不使用mybatis plus的模板, 生成mybatis的模板
default-empty只生成类,没有模板代码
mybatis-plus2使用Mybatis plus 2版本的模板
mybatis-plus3使用Mybatis plus 3版本的模板

四、总结

两种方式都可以生成代码,使用代码的方式更加灵活一些,代码也更加方便管理,使用插件更加快捷一点,也可以自定义修改插件模板,但是不方便团队维护

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

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

相关文章

3ds Max云渲染平台哪个好?

3ds Max云渲染平台哪个好&#xff1f; 3ds Max是一款包含建模、动画、粒子动力学等强大功能的三维动画制作软件&#xff0c;3ds Max对特定如游戏建模、特效制作、产品模型设计等领域都具备了过硬的专业能力&#xff0c;同时3ds Max也是很多CGer青睐的CG软件。 作为支持3ds Ma…

黑马Redis笔记高级篇 | Redis最佳实践

黑马Redis笔记高级篇 | Redis最佳实践 1、Redis键值设计1.1、优雅的key结构1.2、拒绝BigKey1.3、恰当的数据类型1.4、总结 2、批处理优化1.1、Pipeline1.2、集群下的批处理 3、服务端优化3.1、持久化配置3.2、慢查询3.3、命令及安全配置3.4、内存配置 4、集群最佳实践 1、Redis…

深度学习用于医学预后-第二课第三周14-15节-评估方法比较以及Kaplan-Meier估计

评估对比 我们现在对 t25 的生存率得出了一个新的估计值&#xff0c;为0.56。现在&#xff0c;让我们将其与之前所做的估计进行比较。 当我们假设所有患者在他们截尾时间立即死亡时&#xff0c;我们获得了一个低生存概率为0.29。而在另一极端&#xff0c;如果我们假设他们永久…

LeetCode 周赛 345(2023/05/14)体验一题多解的算法之美

本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 提问。 往期回顾&#xff1a;LeetCode 双周赛第 104 场 流水的动态规划&#xff0c;铁打的结构化思考 周赛概览 T1. 找出转圈游戏输家&#xff08;Easy&#xff09; 标签&#xff…

微信小程序入门02-安装mysql

我们上一篇介绍的是微信开发者工具的安装&#xff0c;开发一个小程序肯定要有后端服务&#xff0c;有后端服务首先要可以存储和查询数据。 数据库种类比较多&#xff0c;我们这里选择mysql&#xff0c;为啥选择这个呢&#xff0c;因为首先用的人多比较稳定&#xff0c;再一个免…

MapReduce:Index索引案例

案例需求 a.html hello world hello lucy hello jack hello liuyan b.html hello aaa aaa bbb bbb ccc hello liuyan liuyan tangyan c.html world hello liuyan tangyan tangyan aaa bbb ccc 计算每个单词在每个文件中出现的次数 aaa b.html-2 c.html-1 bbb b.h…

文本三剑客awk

awk 工作原理&#xff1a; 逐行读取文本&#xff0c;默认以空格或tab键为分隔符进行分隔&#xff0c;将分隔所得的各个字段保存到内建变量中&#xff0c;并按模式或者条件执行编辑命令。 sed命令常用于一整行的处理&#xff0c;而awk比较倾向于将一行分成多个“字段”然后再进…

Visual Studio Code 插件的开发、调试及发布完整详细教程

本篇文章主要讲解:Vscode的拓展插件,从环境安装到生成项目文件再到调试及部署发布的完整开发教程。 日期:2023年5月10日 vscode 1.78.1 一、准备node环境及安装yo 项目初始化,优先安装yo、再通过yo创建code及插件项目。 基础条件 需要先安装node,且node环境已经正确安装…

5.项目管理(测试)工具

目录 一、禅道 1.为什么需要禅道&#xff1f;&#xff08;仅从测试角度看&#xff09; 2.管理工具的对比 3.禅道的设计理念 4.软件开发的生命周期有哪些&#xff1f;&#xff08;软件开发的流程&#xff09; 二、selenium 1、什么是自动化测试&#xff1f; 2.UI自动化的…

2023年,最新linux c/c++后台开发学习路线分享

摘自零声教育课程大纲&#xff0c;8个技术维度项目实战&#xff0c;为你打通linux c/c后台开发的技术栈。 部分往期视频 c八股文重点&#xff0c;网络的posix api实现原理 8个方面讲解io_uring&#xff0c;重塑对异步io的理解 c后端开发中数据库异步连接、异步连接池的原理…

浅聊一下PTP

浅聊一下ptp 最近做了点时间同步相关工作&#xff0c;浅浅聊一下学习和了解的东西吧。 大概了解了一下PTP&#xff0c;NTP&#xff0c;PTPD&#xff0c;LinuxPTP 1.时钟同步 网络时钟同步包括频率同步和相位同步两个概念。 频率同步&#xff08;Frequency synchronization…

Hudi集成Spark与hudi表的创建

集成Hudi包 Spark-shell 方式启动 Spark SQL方式启动 SQL方式创建hudi建表 集成Hudi包 以下为hudi与spark版本的兼容 Hudi Supported Spark 3 version 0.12.x 3.3.x&#xff0c;3.2.x&#xff0c;3.1.x 0.11.x 3.2.x&#xff08;default build, Spark bundle only&…

浪漫行星,不浪漫你打我

先上效果图&#xff1a; 再上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>import "https://fonts.googleapis.com/css2?familyMegrim&…

tftp文件传输协议报文解析

1&#xff0c;接着上一篇描述bootp,我们现在了解一下tftp协议。 先来看看tftp的五种报文格式 操作码补充说明&#xff1a; 读文件请求包&#xff1a;Read request&#xff0c;简写为RRQ&#xff0c;对应Opcode字段值为1 写文件请求包&#xff1a;Write requst&#xff0c;简…

练习SSM微博项目

微博项目 项目概述 ​ 该项目是一款社交媒体应用&#xff0c;用户可以在平台上发表短文、图片等信息&#xff0c;分享自己的想法、心情和生活。微博的用户群体广泛&#xff0c;包括个人、娱乐明星、公司、政府官方等。 项目功能 用户管理 用户可以注册微博账号&#xff0c;登…

​ES elasticsearch-analysis-dynamic-synonym​连接数据库动态更新synonym近义词

前言 在很多搜索场景中&#xff0c;我们希望能够搜索出搜索词相关的目标&#xff0c;同时也希望能搜索出其近义词相关的目标。例如在商品搜索中&#xff0c;搜索“瓠瓜”&#xff0c;也希望能够搜索出“西葫芦”&#xff0c;但“西葫芦”商品名称因不含有“瓠瓜”&#xff0c;导…

今年流行的人工智能AI 人脸生成器,你懂的。

使用人工智能 (AI) 继续革新我们与技术和环境互动的方式。AI 最令人兴奋的应用之一是人脸生成器&#xff0c;它可以根据输入数据创建逼真、高质量的图像。 在这篇博文中&#xff0c;我们将讨论当今可用的 10 大AI 人脸生成器&#xff0c;探索它们的功能和性能&#xff0c;并发…

DDD重构中台业务

大家好&#xff0c;我是易安&#xff01;今天我们谈一谈如何使用DDD重构中台业务。 DDD有两把利器&#xff0c;那就是它的战略设计和战术设计方法。中台在企业架构上更多偏向业务模型&#xff0c;形成中台的过程实际上也是业务领域不断细分的过程。在这个过程中我们会将同类通用…

selenium+Java环境搭建

目录 ①下载Chrome浏览器并查看浏览器版本 ②下载解压Chrome浏览器驱动 ③配置Java环境 ④将驱动文件放到jdk的bin文件目录下 ⑤验证环境是否搭建成功 1、创建java&#xff08;Maven&#xff09;项目&#xff0c;在pom.xml中添加依赖 2、在java文件创建Main类 &am…

[刷题]贪心入门

文章目录 贪心区间问题区间选点区间合并区间覆盖 哈夫曼树&#xff08;堆&#xff09;合并果子 排序不等式排队打水 绝对值不等式货仓选址 推出来的不等式耍杂技的牛 以前的题 贪心 贪心&#xff1a;每一步行动总是按某种指标选取最优的操作来进行&#xff0c; 该指标只看眼前&…