SpringBoot集成MyBatis-Plus + MyBatis-Plus代码生成器[MP系列] - 第490篇

2023-10-11 05:12

本文主要是介绍SpringBoot集成MyBatis-Plus + MyBatis-Plus代码生成器[MP系列] - 第490篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

历史文章(文章累计490+)

《国内最全的Spring Boot系列之一》

《国内最全的Spring Boot系列之二》

《国内最全的Spring Boot系列之三》

《国内最全的Spring Boot系列之四》

《国内最全的Spring Boot系列之五》

《国内最全的Spring Boot系列之六》

MyBatis-Plus实现普通查询/分页查询[MyBatis-Plus系列] - 第484篇

使用LambdaQueryWrapper再也不担心字段拼写错误了 [MyBatis-Plus系列] - 第485篇

表名注解/主键注解/字段注解/乐观锁注解[MyBatis-Plus系列] - 第486篇

MyBatis-Plus通用Service快速实现赠三改查[MyBatis-Plus系列] - 第489篇

悟纤:师傅,你说两个人在一起,怎么样才叫合适?

师傅:两个人在一起,最重要的是相处舒服

师傅:不要占有,不要纠缠,不要控制对方,给彼此一点空间。

师傅:两个人在一起,最舒服的状态是:都能做自己,活成自己喜欢的样子

悟纤:除了相处舒服之外,师傅你觉得还有什么重要的吗?

师傅:沟通

师傅:两个人在一起,碰到问题了可以进行有效的沟通。问题不可怕,可怕的是不知道问题在哪里。

师傅:我们应该意识到沟通技巧比沟通本身更为重要,可是很多人在沟通的时候却把来之不易的沟通机会当成了情绪的发泄,我们会说,我忍你很久了,你哪里哪里做得多过分,这些情绪化的话,可是这些话往往会让我们的沟通变得无效,甚至加剧两人的矛盾。

师傅:因此,我们在沟通的时候一定要心平气和,并且在沟通前想好自己要说些什么,我为什么要说这些,说了这些对于问题的解决是否有帮助。你要记住沟通是为了解决问题,不是为了情绪发泄。

悟纤:徒儿受教了~ 看来徒儿的功力还是有待提升,学习学习再学习~

导读

Hi,大家好,我是悟纤。过着爱谁谁的生活,活出不设限的人生。

平时在开发的过程中,对于新建的一张表难免会有对其进行增删改查的操作,而且还要写Controller、service、Mapper、Mapper.xml、PO、VO等等。如果每次都要去写这些跟业务毫不相干但是却又耗时耗力的重复代码这不仅是让开发人员不能专注于业务逻辑甚至可能由于不注意导致字段大小写或者某个字母写错而出现bug。所以我们可以利用代码生成器来生成这些固有的代码,这样不仅正确性高,毕竟代码是不会骗人的。而且还节省了时间。

代码生成器有很多,大多数都是基于模板引擎freemarker或者velocity来实现的。git上有许多特别好用和功能强大的代码生成器,比如fast-generator,这也是通过freemarker模板引擎来生成模板代码的,并且提供了可视化界面。

对于强大的mybatis-plus也提供了相应的代码生成插件mybatis-plus-generator,这一节来看看如何通过 mybatis-plus-generator来生成代码。

说明

在正式进入本节之前对于一些版本和本节要实现的点做一个说明。

· 本节要实现的需求

通过mybatis-plus-generator插件来根据已经创建的表信息,生成代码:entity/mapper/service/serviceImpl/controller

画外音:所以表是要手动创建的。

· 版本说明

(1)Spring Boot:2.7.14

(2)mybatis-plus:3.5.3.2

(3)mybatis-plus-generator:3.5.3.2

(4)mysql:8

(5)jdk:1.8

一、mybatis-plus-generator实操

接下来来实际操作一下mybatis-plus-generator的使用。

1.1 添加依赖mybatis-plus-generator

AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码。

MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:

在 pom.xml 文件中添加 AutoGenerator 的依赖。

<dependency><!-- mybatis-plus代码生成器 -->    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-generator</artifactId>    <version>3.5.3.2</version></dependency>

添加模板引擎依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,这里使用velocity引擎。

<dependency>    <groupId>org.apache.velocity</groupId>    <artifactId>velocity-engine-core</artifactId>    <version>2.2</version></dependency>

1.2 创建表和数据

使用mybatis-plus-generator生成代码,是基于表结构来进行生成的,所以这个创建表这个过程是无法省略的。

-- ------------------------------ Table structure for hsp_hospital-- ----------------------------DROP TABLE IF EXISTS `hsp_hospital`;CREATE TABLE `hsp_hospital` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `title` varchar(255)  DEFAULT NULL COMMENT '医院名称',  `audit_status` tinyint(4) DEFAULT NULL COMMENT '审核状态,1:审核通过;0:待审核',  `create_time` datetime DEFAULT NULL,  `update_time` datetime DEFAULT NULL,  PRIMARY KEY (`id`) USING BTREE,  UNIQUE KEY `title` (`title`) USING BTREE) ENGINE=InnoDB  COMMENT='医院表';-- ------------------------------ Records of hsp_hospital-- ----------------------------BEGIN;INSERT INTO `hsp_hospital` VALUES (1, '中国医学科学院北京协和医院', 1, '2023-09-07 11:07:32', NULL);INSERT INTO `hsp_hospital` VALUES (2, '四川大学华西医院', 1, '2023-09-07 11:07:32', NULL);INSERT INTO `hsp_hospital` VALUES (3, '中国人民解放军总医院', 1, '2023-09-07 11:07:32', NULL);INSERT INTO `hsp_hospital` VALUES (4, '复旦大学附属中山医院', 1, '2023-09-07 11:07:32', NULL);INSERT INTO `hsp_hospital` VALUES (5, '上海交通大学附属瑞金医院', 1, '2023-09-07 11:07:32', NULL);INSERT INTO `hsp_hospital` VALUES (6, '华中科技大学同济医学院附属同济医院', 1, '2023-09-07 11:07:32', NULL);INSERT INTO `hsp_hospital` VALUES (7, '复旦大学附属华山医院', 1, '2023-09-07 11:07:32', NULL);INSERT INTO `hsp_hospital` VALUES (8, '中山大学附属第一医院', 1, '2023-09-07 11:07:32', NULL);INSERT INTO `hsp_hospital` VALUES (9, '华中科技大学同济医学院附属协和医院', 1, '2023-09-07 11:07:32', NULL);INSERT INTO `hsp_hospital` VALUES (10, '浙江大学医学院附属第一医院', 1, '2023-09-07 11:07:32', NULL);COMMIT;

1.3 定义代码生成器

定义代码生成器Generator:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.baomidou.mybatisplus.generator.FastAutoGenerator;import com.baomidou.mybatisplus.generator.config.rules.DateType;import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;import java.util.ArrayList;import java.util.List;public class Generator {    public static void main(String[] args) {        //数据库连接        String url = "jdbc:mysql://localhost:3306/mybatis-plus-demo";//数据库url        String username = "root";//账号        String password = "root";//密码        String module = "";//项目模块名,如果是有父项目的话,需要配置。        //全局配置参数        String author = "悟纤[公众号SpringBoot]";//作者        String outputDir = System.getProperty("user.dir")+"/"+module+"/src/main/java";//指定输出目录        //包配置参数        String parent = "com.kfit";//父包名        String moduleName = "hospital";//父包模块名        String entity = "entity";//Entity 实体类包名        String mapper = "mapper";//Mapper 包名        String mapperXml = "mapper";//Mapper XML 包名        String service = "service";//Service 包名        String serviceImpl = "service.impl";//Service Impl 包名        String controller = "controller";//Controller 包名*/        //要生成的数据库表        List<String> tables = new ArrayList<>();        tables.add("hsp_hospital");        //开始生成        FastAutoGenerator.create(url,username,password)                //全局配置                .globalConfig(builder -> {                    builder.author(author)                            .outputDir(outputDir)                            .disableOpenDir() //生成之后不打开目录                            /*.enableSwagger()//开启swagger*/                            .dateType(DateType.ONLY_DATE) //定义生成的实体类中日期类型 DateType.ONLY_DATE 默认值: DateType.TIME_PACK                            .commentDate("yyyy-MM-dd");//注释日期                })                //包配置                .packageConfig(builder -> {                    builder.parent(parent)                            .moduleName(moduleName)                            .entity(entity)                            .mapper(mapper)                            .xml(mapperXml)                            .service(service)                            .serviceImpl(serviceImpl)                            .controller(controller);                })                //策略配置                .strategyConfig(builder -> {                    builder.addInclude(tables)                            //开启生成实体类                            .entityBuilder()                            .enableLombok()//开启 lombok 模型                            .enableTableFieldAnnotation()//开启生成实体时生成字段注解                            //开启生成mapper                            .mapperBuilder()                            //.enableBaseResultMap()//启用 BaseResultMap 生成                            .superClass(BaseMapper.class)//设置父类                            //.enableMapperAnnotation()//开启 @Mapper 注解                            .formatMapperFileName("%sMapper")//格式化 mapper 文件名称                            .formatXmlFileName("%sMapper")//格式化 xml 实现类文件名称                            //开启生成service及impl                            .serviceBuilder()                            .formatServiceFileName("%sService")//格式化 service 接口文件名称                            .formatServiceImplFileName("%sServiceImpl")//格式化 service 实现类文件名称                            //开启生成controller                            .controllerBuilder()                            // 映射路径使用连字符格式,而不是驼峰                            //.enableHyphenStyle()                            .formatFileName("%sController")//格式化文件名称                            .enableRestStyle();                })                .templateEngine(new VelocityTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板                //.templateConfig(builder -> builder.controller(""))//关闭生成controller                .execute();    }}

1.4 执行代码代码生成器

运行main方法,然后会自动生成代码:

然后查看生成的源码:

一下子把相关的代码都生成了,是不是很方便。生成的实体类HspHospital如下,不仅标注了实体类和表之间的关系,而且注释信息也是同步过来的,很是清晰。

小结

本文主要介绍了MP的插件代码生成器,可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码。使用步骤:

(1)在pom.xml文件中添加依赖mybatis-plus-generator。

(2)创建表结构:代码生成器是根据表结构的信息来对应生成相应的代码的,所以需要创建表结构信息。

(3)配置代码生成器:使用FastAutoGenerator进行代码的生成,这个类中可以有各种的构造。

我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。

à悟纤学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

ShardingJDBC分库分表:http://t.cn/A6ZarrqS

分布式事务解决方案:http://t.cn/A6ZaBnIr

JVM内存模型调优实战:http://t.cn/A6wWMVqG

Spring入门到精通:https://t.cn/A6bFcDh4

大话设计模式之爱你:https://dwz.cn/wqO0MAy7

这篇关于SpringBoot集成MyBatis-Plus + MyBatis-Plus代码生成器[MP系列] - 第490篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/185767

相关文章

Java中Map的五种遍历方式实现与对比

《Java中Map的五种遍历方式实现与对比》其实Map遍历藏着多种玩法,有的优雅简洁,有的性能拉满,今天咱们盘一盘这些进阶偏基础的遍历方式,告别重复又臃肿的代码,感兴趣的小伙伴可以了解下... 目录一、先搞懂:Map遍历的核心目标二、几种遍历方式的对比1. 传统EntrySet遍历(最通用)2. Lambd

Spring Boot 中 RestTemplate 的核心用法指南

《SpringBoot中RestTemplate的核心用法指南》本文详细介绍了RestTemplate的使用,包括基础用法、进阶配置技巧、实战案例以及最佳实践建议,通过一个腾讯地图路线规划的案... 目录一、环境准备二、基础用法全解析1. GET 请求的三种姿势2. POST 请求深度实践三、进阶配置技巧1

springboot+redis实现订单过期(超时取消)功能的方法详解

《springboot+redis实现订单过期(超时取消)功能的方法详解》在SpringBoot中使用Redis实现订单过期(超时取消)功能,有多种成熟方案,本文为大家整理了几个详细方法,文中的示例代... 目录一、Redis键过期回调方案(推荐)1. 配置Redis监听器2. 监听键过期事件3. Redi

Spring Boot 处理带文件表单的方式汇总

《SpringBoot处理带文件表单的方式汇总》本文详细介绍了六种处理文件上传的方式,包括@RequestParam、@RequestPart、@ModelAttribute、@ModelAttr... 目录方式 1:@RequestParam接收文件后端代码前端代码特点方式 2:@RequestPart接

SpringBoot整合Zuul全过程

《SpringBoot整合Zuul全过程》Zuul网关是微服务架构中的重要组件,具备统一入口、鉴权校验、动态路由等功能,它通过配置文件进行灵活的路由和过滤器设置,支持Hystrix进行容错处理,还提供... 目录Zuul网关的作用Zuul网关的应用1、网关访问方式2、网关依赖注入3、网关启动器4、网关全局变

SpringBoot全局异常拦截与自定义错误页面实现过程解读

《SpringBoot全局异常拦截与自定义错误页面实现过程解读》本文介绍了SpringBoot中全局异常拦截与自定义错误页面的实现方法,包括异常的分类、SpringBoot默认异常处理机制、全局异常拦... 目录一、引言二、Spring Boot异常处理基础2.1 异常的分类2.2 Spring Boot默

基于SpringBoot实现分布式锁的三种方法

《基于SpringBoot实现分布式锁的三种方法》这篇文章主要为大家详细介绍了基于SpringBoot实现分布式锁的三种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、基于Redis原生命令实现分布式锁1. 基础版Redis分布式锁2. 可重入锁实现二、使用Redisso

SpringBoot的全局异常拦截实践过程

《SpringBoot的全局异常拦截实践过程》SpringBoot中使用@ControllerAdvice和@ExceptionHandler实现全局异常拦截,@RestControllerAdvic... 目录@RestControllerAdvice@ResponseStatus(...)@Except

Springboot配置文件相关语法及读取方式详解

《Springboot配置文件相关语法及读取方式详解》本文主要介绍了SpringBoot中的两种配置文件形式,即.properties文件和.yml/.yaml文件,详细讲解了这两种文件的语法和读取方... 目录配置文件的形式语法1、key-value形式2、数组形式读取方式1、通过@value注解2、通过

Java 接口定义变量的示例代码

《Java接口定义变量的示例代码》文章介绍了Java接口中的变量和方法,接口中的变量必须是publicstaticfinal的,用于定义常量,而方法默认是publicabstract的,必须由实现类... 在 Java 中,接口是一种抽象类型,用于定义类必须实现的方法。接口可以包含常量和方法,但不能包含实例