历史文章(文章累计490+)
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的使用。
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码。
MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:
在 pom.xml 文件中添加 AutoGenerator 的依赖。
<dependency>
<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>
使用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;
定义代码生成器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();
}
}
运行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