SpringBoot中的自动代码生成是基于Mybatis-Plus
ztj100 2024-12-30 08:17 17 浏览 0 评论
[来看我]点赞再看,养成习惯。
简介
基于Mybatis-Plus的自动代码生成有很多方式,这里介绍下我在用的两种:
- 本地代码生成:Mybatis-Plus官方
- 在线代码生成:第三方
听说Idea也有自动生成的插件,但是我还没去看,我觉得这俩就够用了(但也说不准哪天,用了插件后,才发现柳暗花明呢)
本地代码生成
就是在自己的项目里,写一个Java程序,配置好各种参数,启动后就可以自动生成
这种方法的好处是,直接生成到本地项目,不需要手动再去复制粘贴
缺点就是,刚开始的配置比较多(但是一劳永逸)
好了,下面就开始上代码好消息是下面的代码都有注释说明,另一个好消息是生成的代码也是有注释的(尤其是entity类的字段注解,很实用)
1.配置pom.xml
<!-- mybatis-plus代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>
<!-- velocity模板引擎,用于mybatis-plus代码生成器 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<!-- lombok 自动生成会用到-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
2.自动生成代码的Java主程序
// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
public class GenerateCode {
/**
* <p>
* 读取控制台内容
* </p>
*/
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.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 1. 全局配置
GlobalConfig gc = new GlobalConfig();
// 项目根目录
String projectPath = System.getProperty("user.dir");
// 生成代码的输出目录:一般这个就是固定的,这里不用写到具体的哪个包,因为下面会单独配置包名
gc.setOutputDir(projectPath + "/src/main/java");
// 生成代码的author
gc.setAuthor("javalover");
// 生成代码后,是否自动打开生成的目录:这里我们不需要,因为就是生成到当前项目
gc.setOpen(false);
// 设置全局配置
mpg.setGlobalConfig(gc);
// 2. 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&nullCatalogMeansCurrent=true");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
mpg.setDataSource(dsc);
// 3. 包配置
PackageConfig pc = new PackageConfig();
// 设置包名:和上面的输出目录进行拼接(ourDir+parent)
pc.setParent("cn.stylefeng.guns.modular.business");
// 检测命令行输入的模块名:和上面的包名进行拼接(outDir+parent+moduleName),生成代码都会放到这个模块下
pc.setModuleName(scanner("模块名"));
mpg.setPackageInfo(pc);
// 4. 策略配置
StrategyConfig strategy = new StrategyConfig();
// 自动生成 实体类的命名:数据库映射到实体类,下划线转驼峰
strategy.setNaming(NamingStrategy.underline_to_camel);
// 这里如果不设置,会跟随上面实体类的命名设置
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 字段注解:这里我们把表字段的注解打开,比如@TableField("car_name")
strategy.setEntityTableFieldAnnotationEnable(true);
// 实体类的父类:如果有就配置,记得加包名
strategy.setSuperEntityClass("cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity");
// 映射类的父类:如果有就配置,记得加包名
strategy.setSuperMapperClass("com.baomidou.mybatisplus.core.mapper.BaseMapper");
// 服务接口的父类:如果有就配置,记得加包名
strategy.setSuperServiceClass("com.baomidou.mybatisplus.extension.service.IService");
// 服务实现类的父类:如果有就配置,记得加包名
strategy.setSuperServiceImplClass("com.baomidou.mybatisplus.extension.service.impl.ServiceImpl");
// 控制器类的父类:如果有就配置,记得加包名
// strategy.setSuperControllerClass("");
// lombok:是否开启Lombok的注解,比如@Data,@EqualsAndHashCode(callSuper = true)
strategy.setEntityLombokModel(true);
// 控制器的@RestController注解:是否开启,不开启则默认为@Controller
strategy.setRestControllerStyle(true);
// 监测命令行的输入:表名
strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
// 控制器的请求映射url风格:驼峰转连字符,比如"carList"-> "car-list"
strategy.setControllerMappingHyphenStyle(true);
// 设置表的前缀:设置后,生成的类名和Controller的请求映射中就不会包含表前缀
// 设置后为 @RequestMapping("/gps/car"),而不是@RequestMapping("/gps/gps-car")
// 类名同理
strategy.setTablePrefix("gps");
mpg.setStrategy(strategy);
// 5. 配置模板引擎
// 默认采用velocity模板
// mpg.setTemplateEngine(new VelocityTemplateEngine());
mpg.execute();
}
}
启动程序,在命令行依次输入包名,表名,等待运行完成就可以了
生成后的目录结构如下:
可以看到,基本的框架都有了
下面我们看下生成的entity文件:
Car.java
/**
* <p>
* 车辆管理
* </p>
*
* @author javalover
* @since 2021-04-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("gps_car")
public class Car extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 车辆id
*/
@TableId("car_id")
private Long carId;
/**
* 所属公司id
*/
@TableField("company_id")
private Long companyId;
/**
* 车辆名称
*/
@TableField("car_name")
private String carName;
/**
* 车辆种类
*/
@TableField("car_type")
private Integer carType;
/**
* 车辆颜色
*/
@TableField("car_color")
private String carColor;
/**
* 司机
*/
@TableField("car_driver")
private String carDriver;
/**
* 车辆价格
*/
@TableField("car_price")
private BigDecimal carPrice;
/**
* 油耗
*/
@TableField("fuel_consumption")
private BigDecimal fuelConsumption;
/**
* 车牌号
*/
@TableField("car_number")
private String carNumber;
/**
* 车架号
*/
@TableField("frame_number")
private String frameNumber;
/**
* 载重
*/
@TableField("load_weight")
private BigDecimal loadWeight;
/**
* 车照片
*/
@TableField("car_img")
private String carImg;
/**
* 车辆实时定位
*/
@TableField("car_location")
private String carLocation;
}
在线代码生成
就是在第三方的网站,配置各种参数,点击生成就可以了,然后下载到本地。这种方法的好处是,前期不用太多配置,使用方便
缺点就是:
- 需要在线配置一个小型的数据库,上传SQL语句
- 生成后,需要拉到本地项目中
- 不够灵活,比如父类的配置等
其实它的缺点就是因为它的简单导致的,这种就比较适合新的项目,想要快速上手体验的朋友,因为在线的操作很简单,这里给出链接,具体操作大家体验下就知道了
在线链接: https://gen.stylefeng.cn/#/createCode
总结
自动生成代码的方式有很多,而这里的只是冰山一角
角1:基于Mybatis-Plus官网的例子(灵活,功能全)
角2:基于第三方的在线生成(简单,上手快)
后记:
最后说一句感谢大家的观看谢谢(求关注,别白嫖我)
如果这篇文章对您有所帮助,或者有所启发的话,帮忙关注一下,您的支持是我坚持写作最大的动力。
相关推荐
- 30天学会Python编程:16. Python常用标准库使用教程
-
16.1collections模块16.1.1高级数据结构16.1.2示例...
- 强烈推荐!Python 这个宝藏库 re 正则匹配
-
Python的re模块(RegularExpression正则表达式)提供各种正则表达式的匹配操作。...
- Python爬虫中正则表达式的用法,只讲如何应用,不讲原理
-
Python爬虫:正则的用法(非原理)。大家好,这节课给大家讲正则的实际用法,不讲原理,通俗易懂的讲如何用正则抓取内容。·导入re库,这里是需要从html这段字符串中提取出中间的那几个文字。实例一个对...
- Python数据分析实战-正则提取文本的URL网址和邮箱(源码和效果)
-
实现功能:Python数据分析实战-利用正则表达式提取文本中的URL网址和邮箱...
- python爬虫教程之爬取当当网 Top 500 本五星好评书籍
-
我们使用requests和re来写一个爬虫作为一个爱看书的你(说的跟真的似的)怎么能发现好书呢?所以我们爬取当当网的前500本好五星评书籍怎么样?ok接下来就是学习python的正确姿...
- 深入理解re模块:Python中的正则表达式神器解析
-
在Python中,"re"是一个强大的模块,用于处理正则表达式(regularexpressions)。正则表达式是一种强大的文本模式匹配工具,用于在字符串中查找、替换或提取特定模式...
- 如何使用正则表达式和 Python 匹配不以模式开头的字符串
-
需要在Python中使用正则表达式来匹配不以给定模式开头的字符串吗?如果是这样,你可以使用下面的语法来查找所有的字符串,除了那些不以https开始的字符串。r"^(?!https).*&...
- 先Mark后用!8分钟读懂 Python 性能优化
-
从本文总结了Python开发时,遇到的性能优化问题的定位和解决。概述:性能优化的原则——优化需要优化的部分。性能优化的一般步骤:首先,让你的程序跑起来结果一切正常。然后,运行这个结果正常的代码,看看它...
- Python“三步”即可爬取,毋庸置疑
-
声明:本实例仅供学习,切忌遵守robots协议,请不要使用多线程等方式频繁访问网站。#第一步导入模块importreimportrequests#第二步获取你想爬取的网页地址,发送请求,获取网页内...
- 简单学Python——re库(正则表达式)2(split、findall、和sub)
-
1、split():分割字符串,返回列表语法:re.split('分隔符','目标字符串')例如:importrere.split(',','...
- Lavazza拉瓦萨再度牵手上海大师赛
-
阅读此文前,麻烦您点击一下“关注”,方便您进行讨论和分享。Lavazza拉瓦萨再度牵手上海大师赛标题:2024上海大师赛:网球与咖啡的浪漫邂逅在2024年的上海劳力士大师赛上,拉瓦萨咖啡再次成为官...
- ArkUI-X构建Android平台AAR及使用
-
本教程主要讲述如何利用ArkUI-XSDK完成AndroidAAR开发,实现基于ArkTS的声明式开发范式在android平台显示。包括:1.跨平台Library工程开发介绍...
- Deepseek写歌详细教程(怎样用deepseek写歌功能)
-
以下为结合DeepSeek及相关工具实现AI写歌的详细教程,涵盖作词、作曲、演唱全流程:一、核心流程三步法1.AI生成歌词-打开DeepSeek(网页/APP/API),使用结构化提示词生成歌词:...
- “AI说唱解说影视”走红,“零基础入行”靠谱吗?本报记者实测
-
“手里翻找冻鱼,精心的布局;老漠却不言语,脸上带笑意……”《狂飙》剧情被写成歌词,再配上“科目三”背景音乐的演唱,这段1分钟30秒的视频受到了无数网友的点赞。最近一段时间随着AI技术的发展,说唱解说影...
- AI音乐制作神器揭秘!3款工具让你秒变高手
-
在音乐创作的领域里,每个人都有一颗想要成为大师的心。但是面对复杂的乐理知识和繁复的制作过程,许多人的热情被一点点消磨。...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 30天学会Python编程:16. Python常用标准库使用教程
- 强烈推荐!Python 这个宝藏库 re 正则匹配
- Python爬虫中正则表达式的用法,只讲如何应用,不讲原理
- Python数据分析实战-正则提取文本的URL网址和邮箱(源码和效果)
- python爬虫教程之爬取当当网 Top 500 本五星好评书籍
- 深入理解re模块:Python中的正则表达式神器解析
- 如何使用正则表达式和 Python 匹配不以模式开头的字符串
- 先Mark后用!8分钟读懂 Python 性能优化
- Python“三步”即可爬取,毋庸置疑
- 简单学Python——re库(正则表达式)2(split、findall、和sub)
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)