mybatis plus自动生成代码(代码生成器)

news2024/11/26 16:43:13

参考

05_尚硅谷_搭建项目环境(代码生成器)_哔哩哔哩_bilibili

 调用mp的AutoGenerator可以生成代码,就像java脚本一样,运行即可生成

要求代码生成器脚本不用会写,会修改其中条项生成我们预期的代码即可。

项目整体结构

 

 

前置:配置application.properties

# 服务端口
server.port=8001
# 服务名
spring.application.name=service-edu
# 环境设置:dev、test、prod
spring.profiles.active=dev
# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=190201
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

生成代码需要用到application.properties里的一些配置,比如port和应用名,这些在生成的代码里都有所体现。

总体代码

创建CodeGeneratorTest.java文件
package com.atguigu;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.Test;

/**
 * @author
 * @since 2018/12/13
 */
public class CodeGeneratorTest {

    @Test
    public void run() {

        // 1、创建代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 2、全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");//输出路径
        gc.setAuthor("testjava");//设置作者
        gc.setOpen(false); //生成后是否打开资源管理器 没啥用
        gc.setFileOverride(false); //重新生成时文件是否覆盖 一般不覆盖我们的代码
        gc.setServiceName("%sService");	//去掉Service接口的首字母I 更没用
        gc.setIdType(IdType.ID_WORKER_STR); //主键策略
        //DateType.ONLY_DATE 表示使用 java.util.Date 类型作为日期类型,datetime->java.util.Date
        gc.setDateType(DateType.ONLY_DATE);
        gc.setSwagger2(true);//开启Swagger2模式

        mpg.setGlobalConfig(gc);//将配置写入到生成器中

        // 3、数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("190201");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);

        // 4、包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName("eduservice"); //模块名
        pc.setParent("com.atguigu");//包名
        //模块下面的四个包
        pc.setController("controller");
        pc.setEntity("entity");
        pc.setService("service");
        pc.setMapper("mapper");
        mpg.setPackageInfo(pc);

        // 5、策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude("edu_teacher");//为哪个表生成代码,可以("edu_teacher","abc")生成多张表
        strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略 不用改
        strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀

        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
        strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作

        strategy.setRestControllerStyle(true); //restful api风格控制器
        strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符

        mpg.setStrategy(strategy);


        // 6、执行
        mpg.execute();
    }
}

由于生成代码脚本只需要执行一次,所以在Test中写上就行。 

 

1、创建代码生成器

// 1、创建代码生成器
AutoGenerator mpg = new AutoGenerator();

2、全局配置

GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");//输出路径
gc.setAuthor("testjava");//设置作者
gc.setOpen(false); //生成后是否打开资源管理器 没啥用
gc.setFileOverride(false); //重新生成时文件是否覆盖 一般不覆盖我们的代码
gc.setServiceName("%sService");	//去掉Service接口的首字母I 更没用
gc.setIdType(IdType.ID_WORKER_STR); //主键策略
//DateType.ONLY_DATE 表示使用 java.util.Date 类型作为日期类型,datetime->java.util.Date
gc.setDateType(DateType.ONLY_DATE);
gc.setSwagger2(true);//开启Swagger2模式

mpg.setGlobalConfig(gc);//将配置写入到生成器中

基本需要修改的是gc.setIdType(IdType.ID_WORKER_STR); 主键生成策略,其他的不怎么要修改

3、数据源配置

因为脚本无法读取到application.properties,所以要再配置一下数据源,整体还是四部分,driver,链接库名,用户名密码。加了个dbtype。

// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("190201");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);

还是注意添加上时区,serverTimeZone=GMT%2B8,不同地区的话如果自动生成时间,那么要以本地时区为准,以及高版本mysql使用的是带cj的driver

4、包配置

// 4、包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("eduservice"); //模块名
pc.setParent("com.atguigu");//包名
//模块下面的四个包
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);

com.atguigu.eduservice下面有四个包

5、策略配置

// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("edu_teacher");//为哪个表生成代码,可以("edu_teacher","abc")生成多张表
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略 不用改
strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀

strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作

strategy.setRestControllerStyle(true); //restful api风格控制器
strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符

mpg.setStrategy(strategy);

唯一需要关注的就是strategy.setInclude("edu_teacher");为哪个表生成代码,可以("edu_teacher","abc")生成多张表的代码,其他的不需要动

6、执行生成代码

mpg.execute();

总结

第2和5只有一行代码需要修改,3、4根据我们的需要配置一下,其他的直接照抄即可。

执行

代码生成成功了,四个包下的文件都可以看到了。

 

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

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

相关文章

前端 之 FormData对象浅谈

一、简介 ​ 通常情况下,前端在使用post请求提交数据的时候,请求都是采用application/json 或 application/x-www-form-urlencoded编码类型,分别是借助JSON字符串来传递参数或者keyvalue格式字符串(多参数通过&进行连接&…

mediasoup Transport端口策略

一. 前言 mediasoup 支持多种类型的 Transport,有 WebRtcTransport,PlainTransport 以及 PipeTransport,对于 WebRtcTransport 目前 mediasoup 最新版本已经支持多个 WebRtcTransport 共用单个端口的模式了,而在此之前每个 WebRtc…

真题详解(补码转换)-软件设计(七十四)

真题详解(索引查询)-软件设计(七十三)https://blog.csdn.net/ke1ying/article/details/130659024 Composite模式: 以树形结构来表示”整体-部分”的关系,使得单个和团体的使用都具有一致性。 对一个基本有序的数组进行排序,适合…

【PCIE体系结构九】物理层的基本逻辑框架

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考书籍:《深入浅出SSD:固态存储核心技术、原理与实战》 物…

可见光遥感图像目标检测(三)文字场景检测之Arbitrary

前言 前面介绍了关于可见光遥感图像目标检测任务主要面临的问题,现在对旋转目标的问题进行优化,为了便于大家理解与之前通用目标检测区别,采用Faster-Rcnn网络模型的架构对旋转目标的检测进行改进。 本教程禁止转载。同时,本教程来…

5G-NR非连续接收DRX参数配置详解

5G-NR系统配置中的非连续接收系统 DRX:Discontinuous Reception 5G终端商用在即,根据前期测试及部分5G友好用户反馈,“5G终端功耗大,待机差”问题特别突出。根据5G技术特性,导致5G终端相比4G功耗大很多的原因有如下4…

干货 | Amos实操教程之中介效应检验

Hello,大家好! 这里是壹脑云科研圈,我是喵君姐姐~ 本次推文,我们就来给大家介绍一种处理结构方程模型软件——Amos 。 01 摘要 Amos是什么? Amos由James L. Arbuckle所发展,全名是Analysis of Moment S…

泛化深度学习综述

机器学习系统通常假设训练和测试分布是相同的。为此,一个关键的需求是开发可以推广到unseen分布的模型。领域泛化(DG,Domain generalization),即分布外泛化(out-of-distribution generalization&#xff09…

vim强大的快捷键

文章目录 vim强大的快捷键(必须在可视模式下完成)光标移动(上下左右移动)行选中列选中复制粘贴剪切删除取消后悔取消跳到文件的末尾跳转到我呢见的开头保存并且退出vim编辑器自动补全自动格式化回到行首(这一行的第一个…

ESP32设备驱动-MMA8452加速度计驱动

MMA8452加速度计驱动 文章目录 MMA8452加速度计驱动2、硬件准备3、软件准备4、驱动实现MMA8452Q 是一款智能、低功耗、三轴、电容式微加工加速度计,具有 12 位分辨率。 该加速度计具有嵌入式功能,具有灵活的用户可编程选项,可配置为两个中断引脚。 嵌入式中断功能可实现整体…

DJ5-2 差错检测和纠错

目录 一、差错检测和纠错技术 1、发送节点 2、接收节点 3、说明 二、差错检测技术 1、一比特奇偶校验 2、二维奇偶校验 3、Internet 校验和方法(复习) 4、循环冗余检测 CRC 5、差错检测方法比较 一、差错检测和纠错技术 链路层提供比特级差错检…

我为什么要使用vuetify3做为基础组件去开发公司组件库

设计风格 Vuetify是基于Material Design规范,依靠Material Design的设计优势,在无需编写一行css代码就可以得到非常美观的界面功能,同时Vuetify还具备自适应的能力,可以使用一套代码写出同时兼容手机、平板、web的功能&#xff1…

如何在Simulink中使用可变电阻-可变电容-可变电感

1. 原由 前期文章提出了Simulink如何在线修改(动态修改)模块参数的方法,并提供原创的Dynamic Change Parameter模块(简称DCP模块),模块得到了许多朋友的使用。最近收到几位朋友反馈,他们使用DCP…

VGG网络原理与搭建

VGG网络原理与搭建 VGG在2014年由牛津大学著名研究组VGG(Visual Geometry Group)提出,斩获该年ImageNet竞赛中Localization Task(定位任务)第一名和Classification Task(分类任务)第二名。 论文…

HTTP第10讲——响应状态码

背景 HTTP 报文里请求行的组成部分,包括请求方法和 URI。有了请求行,加上后面的头字段就形成了请求头,可以通过 TCP/IP 协议发送给服务器。 服务器收到请求报文,解析后需要进行处理,具体的业务逻辑多种多样&#xff0…

四、c++学习(类的简介)

上一篇我们做了一个简单的界面优化,并且我们可以选择进入游戏界面,所以这一篇我们来实现贪吃蛇和食物。 C学习,b站直播视频 文章目录 4.0 课程目标4.1 结构体4.1.1 c语言面向对象4.1.2 c的结构体4.1.3 内存对齐 4.2 union4.2.1 union应用&am…

Chapter8:线性系统的状态空间分析与综合(上)

第八章:线性系统的状态空间分析与综合 Exercise8.1 已知控制系统结构图如下所示: 其中: u u u为输入, y y y

Gradle版本、Gradle插件版本和AndroidStudio版本之间的对应关系

问题描述 有时候碰到gradle版本死活下载不下来,还会报Gralde Sync Issues,有可能是你的Gradle Wrapper版本和Gradle插件版本、AndroidStudio版本不匹配。 解决方案 Gradle版本和Gradle插件版本之间存在一定的对应关系。Gradle Wrapper是用来指定项目使用的Gradl…

javaweb系列-js引入、输出、变量、数据类型、运算符

1.1 js介绍 js可以让我们的页面更加的智能,让页面和用户进行交互。 1.2 引入方式 同样,js代码也是书写在html中的,那么html中如何引入js代码呢?主要通过下面的2种引入方式: 第一种方式:内部脚本&#x…

深度学习第J9周:Inception v3算法实战与解析

目录 一、理论基础 二、pytorch代码复现1.前期准备 2.代码复现 3.训练运行 3.2指定图片进行预测 三、总结 🍨 本文为[🔗365天深度学习训练营]内部限免文章(版权归 *K同学啊* 所有) 🍖 作者:[K同学啊] &…