1.说明

本文详细介绍Spring Boot集成MyBatis-Plus代码生成器的方法。
基于一个创建好的Spring Boot工程,
执行MyBatis-Plus提供的AutoGenerator代码生成器,
根据数据库中已经存在的表,
生成Entity、Mapper、Mapper XML、Service、Controller等各个模块的代码,
可以极大的提升开发效率。

2.数据库TBL_ROLE表

这里使用的是MySQL数据库,
数据库配置如下:

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://10.21.13.14:3306/demodbusername: demopassword: demo123456

在数据库中有TBL_ROLE表,
表定义语句如下:

CREATE TABLE TBL_ROLE
(id            BIGINT (20) NOT NULL COMMENT '主键ID',role_name     VARCHAR(30) NULL DEFAULT NULL COMMENT '角色名',role_describe VARCHAR(30) NULL DEFAULT NULL COMMENT '角色描述',PRIMARY KEY (id)
);

下面演示为TBL_ROLE表生成对应各个模块的代码。

3.添加依赖

在pom.xml文件中增加jar包依赖,
包括代码生成器mybatis-plus-generator,
以及模板引擎freemarker:

<!-- MyBatis-Plus代码生成器 -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.2</version>
</dependency>
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.30</version>
</dependency>

注意如果依赖不到freemarker,
需要更新一下工程的Maven依赖,
否则后面执行代码的时候会报错,
找不到freemarker的相关类。

4.编写配置

这里使用创建Java代码的方式进行配置,
创建代码生成器的AutoGenerator类实例,
然后编写AutoGenerator对应的配置参数,
最后执行生成代码的方法即可。
下面演示创建一个CodeGenerator类,
在main方法中实现了AutoGenerator的创建和配置,
最后调用AutoGenerator的execute()方法生成代码。
文末给出了CodeGenerator.java的完整代码。

5.CodeGenerator说明

在CodeGenerator类中,
需要修改下面的常量配置参数,
主要是数据库和表名等参数,
然后执行main方法,
即可生成对应的代码。
如果需要进一步自定义配置,
请详细阅读main方法中1-6这6个配置。

public class CodeGenerator {// 数据库连接配置
private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String JDBC_URL = "jdbc:mysql://10.21.13.14:3306/demodb?useUnicode=true&useSSL=false&characterEncoding=utf8";
private static final String JDBC_USER_NAME = "demo";
private static final String JDBC_PASSOWRD = "demo123456";// 包名和模块名
private static final String PACKAGE_NAME = "com.yuwen";
private static final String MODULE_NAME = "demo";// 表名,多个表使用英文逗号分割
private static final String TBL_NAMES = "tbl_role";// 表名的前缀,从表生成代码时会去掉前缀
private static final String TABLE_PREFIX = "tbl_";// 生成代码入口main方法
public static void main(String[] args) {// 0.代码生成器AutoGenerator mpg = new AutoGenerator();// 1.全局配置GlobalConfig gc = getGlobalConfig();mpg.setGlobalConfig(gc);// 2.数据源配置DataSourceConfig dsc = getDataSourceConfig();mpg.setDataSource(dsc);// 3.包配置PackageConfig pc = getPackageConfig();mpg.setPackageInfo(pc);// 4.自定义配置InjectionConfig cfg = getInjectionConfig();mpg.setCfg(cfg);// 5.模板配置TemplateConfig templateConfig = getTemplateConfig();mpg.setTemplate(templateConfig);// 使用Freemarker模板引擎mpg.setTemplateEngine(new FreemarkerTemplateEngine());// 6.策略配置StrategyConfig strategy = getStrategyConfig();mpg.setStrategy(strategy);// 7.开始生成代码mpg.execute();
}

5.1.全局配置

全局策略配置,具体请查看全局策略配置:

/** 1.全局配置 */
private static GlobalConfig getGlobalConfig() {GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");gc.setOutputDir(projectPath + "/src/main/java");gc.setAuthor("yuwen");gc.setOpen(false);// 自定义生成的ServiceName,去掉默认的ServiceName前面的Igc.setServiceName("%s" + ConstVal.SERVICE);// gc.setSwagger2(true); 实体属性 Swagger2 注解return gc;
}

5.2.数据源配置

数据源配置,通过该配置,指定需要生成代码的具体数据库,
具体请查看数据源配置:

/** 2.数据源配置 */
private static DataSourceConfig getDataSourceConfig() {DataSourceConfig dsc = new DataSourceConfig();dsc.setDriverName(JDBC_DRIVER);dsc.setUrl(JDBC_URL);// dsc.setSchemaName("public");dsc.setUsername(JDBC_USER_NAME);dsc.setPassword(JDBC_PASSOWRD);return dsc;
}

5.3.包配置

包名配置,通过该配置,指定生成代码的包路径,
具体请查看包名配置:

/** 3.包配置 */
private static PackageConfig getPackageConfig() {PackageConfig pc = new PackageConfig();// 生成PACKAGE_NAME.MODULE_NAME的包路径pc.setParent(PACKAGE_NAME);pc.setModuleName(MODULE_NAME);return pc;
}

5.4.自定义配置

注入配置,通过该配置,可注入自定义参数等操作以实现个性化操作,
具体请查看注入配置:

/** 4.自定义配置 */
private static InjectionConfig getInjectionConfig() {// 这里模板引擎使用的是freemarkerString templatePath = "/templates/mapper.xml.ftl";// 自定义输出配置List<FileOutConfig> focList = new ArrayList<>();String projectPath = System.getProperty("user.dir");// 自定义配置会被优先输出focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper"+ StringPool.DOT_XML;}});InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};cfg.setFileOutConfigList(focList);return cfg;
}

5.5.模板配置

模板配置,可自定义代码生成的模板,实现个性化操作,
具体请查看模板配置:

/** 5.模板配置 */
private static TemplateConfig getTemplateConfig() {TemplateConfig templateConfig = new TemplateConfig();// 配置自定义输出模板// 指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别// templateConfig.setEntity("templates/entity2.java");// templateConfig.setService();// templateConfig.setController();templateConfig.setXml(null);return templateConfig;
}

5.6.策略配置

数据库表配置,通过该配置,可指定需要生成哪些表或者排除哪些表,
具体请查看数据库表配置:

/** 6.策略配置 */
private static StrategyConfig getStrategyConfig() {StrategyConfig strategy = new StrategyConfig();// 下划线转驼峰命名strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setEntityLombokModel(false);strategy.setRestControllerStyle(true);strategy.setInclude(TBL_NAMES.split(","));strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix(TABLE_PREFIX);return strategy;
}

6.生成代码

执行代码生成器生成代码后,
控制台输出如下日志:

2020-07-07 10:46:49.906 [main] DEBUG [93] - ==========================准备生成文件...==========================
2020-07-07 10:46:50.150 [main] DEBUG [155] - 创建目录: [D:\Code\Learn\SpringBoot\springboot-mybatis-plus/src/main/java\com\yuwen\demo\entity]
2020-07-07 10:46:50.150 [main] DEBUG [155] - 创建目录: [D:\Code\Learn\SpringBoot\springboot-mybatis-plus/src/main/java\com\yuwen\demo\controller]
2020-07-07 10:46:50.151 [main] DEBUG [155] - 创建目录: [D:\Code\Learn\SpringBoot\springboot-mybatis-plus/src/main/java\com\yuwen\demo\mapper]
2020-07-07 10:46:50.152 [main] DEBUG [155] - 创建目录: [D:\Code\Learn\SpringBoot\springboot-mybatis-plus/src/main/java\com\yuwen\demo\service\impl]
2020-07-07 10:46:50.209 [main] DEBUG [54] - 模板:/templates/mapper.xml.ftl;  文件:D:\Code\Learn\SpringBoot\springboot-mybatis-plus/src/main/resources/mapper/RoleMapper.xml
2020-07-07 10:46:50.292 [main] DEBUG [54] - 模板:/templates/entity.java.ftl;  文件:D:\Code\Learn\SpringBoot\springboot-mybatis-plus/src/main/java\com\yuwen\demo\entity\Role.java
2020-07-07 10:46:50.294 [main] DEBUG [54] - 模板:/templates/mapper.java.ftl;  文件:D:\Code\Learn\SpringBoot\springboot-mybatis-plus/src/main/java\com\yuwen\demo\mapper\RoleMapper.java
2020-07-07 10:46:50.296 [main] DEBUG [54] - 模板:/templates/service.java.ftl;  文件:D:\Code\Learn\SpringBoot\springboot-mybatis-plus/src/main/java\com\yuwen\demo\service\RoleService.java
2020-07-07 10:46:50.297 [main] DEBUG [54] - 模板:/templates/serviceImpl.java.ftl;  文件:D:\Code\Learn\SpringBoot\springboot-mybatis-plus/src/main/java\com\yuwen\demo\service\impl\RoleServiceImpl.java
2020-07-07 10:46:50.299 [main] DEBUG [54] - 模板:/templates/controller.java.ftl;  文件:D:\Code\Learn\SpringBoot\springboot-mybatis-plus/src/main/java\com\yuwen\demo\controller\RoleController.java
2020-07-07 10:46:50.299 [main] DEBUG [107] - ==========================文件生成完成!!!==========================

在工程中看到新生成如下文件:

src/main/resources/mapper/RoleMapper.xml
src/main/java/com/yuwen/demo/entity/Role.java
src/main/java/com/yuwen/demo/mapper/RoleMapper.java
src/main/java/com/yuwen/demo/service/RoleService.java
src/main/java/com/yuwen/demo/service/impl/RoleServiceImpl.java
src/main/java/com/yuwen/demo/controller/RoleController

可以通过这里生成的文件名称,
对比上面的配置的生效情况。
文末给出上面各个文件的完整代码。

7.CodeGenerator.java

package com.example.demo.uitl.generate;import java.util.ArrayList;
import java.util.List;import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.ConstVal;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
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.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;/*** * 代码生成器 ,先修改下面的常量配置参数,然后执行 main方法*/
public class CodeGenerator {// 数据库连接配置private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";private static final String JDBC_URL = "jdbc:mysql://10.21.13.14:3306/demodb?useUnicode=true&useSSL=false&characterEncoding=utf8";private static final String JDBC_USER_NAME = "demo";private static final String JDBC_PASSOWRD = "demo123456";// 包名和模块名private static final String PACKAGE_NAME = "com.yuwen";private static final String MODULE_NAME = "demo";// 表名,多个表使用英文逗号分割private static final String TBL_NAMES = "tbl_role";// 表名的前缀,从表生成代码时会去掉前缀private static final String TABLE_PREFIX = "tbl_";// 生成代码入口main方法public static void main(String[] args) {// 0.代码生成器AutoGenerator mpg = new AutoGenerator();// 1.全局配置GlobalConfig gc = getGlobalConfig();mpg.setGlobalConfig(gc);// 2.数据源配置DataSourceConfig dsc = getDataSourceConfig();mpg.setDataSource(dsc);// 3.包配置PackageConfig pc = getPackageConfig();mpg.setPackageInfo(pc);// 4.自定义配置InjectionConfig cfg = getInjectionConfig();mpg.setCfg(cfg);// 5.模板配置TemplateConfig templateConfig = getTemplateConfig();mpg.setTemplate(templateConfig);// 使用Freemarker模板引擎mpg.setTemplateEngine(new FreemarkerTemplateEngine());// 6.策略配置StrategyConfig strategy = getStrategyConfig();mpg.setStrategy(strategy);// 7.开始生成代码mpg.execute();}/** 1.全局配置 */private static GlobalConfig getGlobalConfig() {GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");gc.setOutputDir(projectPath + "/src/main/java");gc.setAuthor("yuwen");gc.setOpen(false);// 自定义生成的ServiceName,去掉默认的ServiceName前面的Igc.setServiceName("%s" + ConstVal.SERVICE);// gc.setSwagger2(true); 实体属性 Swagger2 注解return gc;}/** 2.数据源配置 */private static DataSourceConfig getDataSourceConfig() {DataSourceConfig dsc = new DataSourceConfig();dsc.setDriverName(JDBC_DRIVER);dsc.setUrl(JDBC_URL);// dsc.setSchemaName("public");dsc.setUsername(JDBC_USER_NAME);dsc.setPassword(JDBC_PASSOWRD);return dsc;}/** 3.包配置 */private static PackageConfig getPackageConfig() {PackageConfig pc = new PackageConfig();// 生成PACKAGE_NAME.MODULE_NAME的包路径pc.setParent(PACKAGE_NAME);pc.setModuleName(MODULE_NAME);return pc;}/** 4.自定义配置 */private static InjectionConfig getInjectionConfig() {// 这里模板引擎使用的是freemarkerString templatePath = "/templates/mapper.xml.ftl";// 自定义输出配置List<FileOutConfig> focList = new ArrayList<>();String projectPath = System.getProperty("user.dir");// 自定义配置会被优先输出focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper"+ StringPool.DOT_XML;}});InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};cfg.setFileOutConfigList(focList);return cfg;}/** 5.模板配置 */private static TemplateConfig getTemplateConfig() {TemplateConfig templateConfig = new TemplateConfig();// 配置自定义输出模板// 指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别// templateConfig.setEntity("templates/entity2.java");// templateConfig.setService();// templateConfig.setController();templateConfig.setXml(null);return templateConfig;}/** 6.策略配置 */private static StrategyConfig getStrategyConfig() {StrategyConfig strategy = new StrategyConfig();// 下划线转驼峰命名strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setEntityLombokModel(false);strategy.setRestControllerStyle(true);strategy.setInclude(TBL_NAMES.split(","));strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix(TABLE_PREFIX);return strategy;}}

8.RoleMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuwen.demo.mapper.RoleMapper"></mapper>

9.Role.java

package com.yuwen.demo.entity;import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;/*** <p>* * </p>** @author yuwen* @since 2020-07-07*/
@TableName("TBL_ROLE")
public class Role implements Serializable {private static final long serialVersionUID = 1L;/*** 主键ID*/private Long id;/*** 角色名*/private String roleName;/*** 角色描述*/private String roleDescribe;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getRoleName() {return roleName;}public void setRoleName(String roleName) {this.roleName = roleName;}public String getRoleDescribe() {return roleDescribe;}public void setRoleDescribe(String roleDescribe) {this.roleDescribe = roleDescribe;}@Overridepublic String toString() {return "Role{" +"id=" + id +", roleName=" + roleName +", roleDescribe=" + roleDescribe +"}";}
}

10.RoleMapper.java

package com.yuwen.demo.mapper;import com.yuwen.demo.entity.Role;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;/*** <p>*  Mapper 接口* </p>** @author yuwen* @since 2020-07-07*/
public interface RoleMapper extends BaseMapper<Role> {}

11.RoleService.java

package com.yuwen.demo.service;import com.yuwen.demo.entity.Role;
import com.baomidou.mybatisplus.extension.service.IService;/*** <p>*  服务类* </p>** @author yuwen* @since 2020-07-07*/
public interface RoleService extends IService<Role> {}

12.RoleServiceImpl.java


13.RoleController

package com.yuwen.demo.service.impl;import com.yuwen.demo.entity.Role;
import com.yuwen.demo.mapper.RoleMapper;
import com.yuwen.demo.service.RoleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;/*** <p>*  服务实现类* </p>** @author yuwen* @since 2020-07-07*/
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService {}

14.参考

代码生成器
代码生成器配置


http://www.taodudu.cc/news/show-1251005.html

相关文章:

  • SpringCloud创建项目父工程
  • SpringCloud创建Eureka模块
  • SpringBoot集成MyBatis-Plus代码生成器(Dao)
  • SpringCloud创建Gateway模块
  • Eclipse控制台Console使用说明
  • POI导入导出Excel(HSSF格式,User Model方式)
  • 正则表达式常用汇总
  • 接口文档编写技巧
  • MySQL客户端mysql常用命令
  • HAproxy开启日志记录
  • SpringCloud创建Config模块
  • SpringCloud创建Eureka Client服务注册
  • SpringCloud创建Config Client配置读取
  • SpringCloud创建Config Client通过Eureka访问Config
  • SpringCloud集成Security安全(Config配置中心)
  • SpringCloud集成Security安全(Eureka注册中心)
  • SpringCloud创建Config多客户端公共配置
  • SpringCloud创建Config读取本地配置
  • SpringCloud使用汇总Config
  • SpringCloud创建Eureka模块集群
  • Eclipse启动SpringCloud微服务集群的方法
  • SpringCloud发现服务代码(EurekaClient,DiscoveryClient)
  • SpringBoot集成Actuator监控管理
  • SpringBoot集成Actuator端点配置
  • SpringBoot集成Actuator健康指示器health
  • gRPC创建Java RPC服务
  • ProtoBuf3语法指南(Protocol Buffers)_上
  • ProtoBuf3语法指南(Protocol Buffers)_下
  • gPRC基本介绍
  • Log4j2日志框架集成Slf4j日志门面

SpringBoot集成MyBatis-Plus代码生成器相关推荐

  1. SpringBoot集成Mybatis项目实操

    本文为<从零打造项目>系列第三篇文章,首发于个人网站. <从零打造项目>系列文章 比MyBatis Generator更强大的代码生成器 SpringBoot项目基础设施搭建 ...

  2. BindingException: Invalid bound statement (not found)问题排查:SpringBoot集成Mybatis重点分析...

    重构代码,方法抛出异常:BindingException: Invalid bound statement (not found) 提示信息很明显:mybatis没有提供某方法 先不解释问题原因和排查 ...

  3. java整合mybatis,springboot集成mybatis

    # springboot集成mybatis springboot基础mybatis还是很简单的,比之前springmvc集成mybatis要少很多配置,只要大家按照步骤一步一步来,几分钟就 能实现.具 ...

  4. springboot集成mybatis源码分析-mybatis的mapper执行查询时的流程(三)

    springboot集成mybatis源码分析-mybatis的mapper执行查询时的流程(三) 例: package com.example.demo.service;import com.exa ...

  5. springboot集成mybatis源码分析-启动加载mybatis过程(二)

    springboot集成mybatis源码分析-启动加载mybatis过程(二) 1.springboot项目最核心的就是自动加载配置,该功能则依赖的是一个注解@SpringBootApplicati ...

  6. springboot集成mybatis源码分析(一)

    springboot集成mybatis源码分析(一) 本篇文章只是简单接受使用,具体源码解析请看后续文章 1.新建springboot项目,并导入mybatis的pom配置 配置数据库驱动和mybat ...

  7. SpringBoot集成Mybatis用法笔记

    今天给大家整理SpringBoot集成Mybatis用法笔记.希望对大家能有所帮助! 搭建一个SpringBoot基础项目. 具体可以参考SpringBoot:搭建第一个Web程序 引入相关依赖 &l ...

  8. Java 捕获 mybatis异常_3 springboot集成mybatis和全局异常捕获

    mybatis有两种方式,一种是基于XML,一种是基于注解 springboot集成mybatis 首先先创建表,这里都简化了 DROP TABLE IF EXISTS `user`; CREATE ...

  9. Springboot集成mybatis通用Mapper与分页插件PageHelper

    Springboot集成mybatis通用Mapper与分页插件PageHelper 插件介绍 通用 Mapper 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及 ...

  10. 一个项目了解 SpringBoot 集成 MyBatis

    SpringBoot 集成 MyBatis 创建项目 1.引入依赖 mybatis-spring-boot-starter 依赖 完整的 pom.xml 2.配置文件 加入mybatis配置 完整的配 ...

最新文章

  1. ios多线程和进程的区别(转载)
  2. TensorFlow数据统计
  3. java日志模块_Java源码初探_logging日志模块实现
  4. boost::safe_numerics::cpp相关的测试程序
  5. 谷歌guava_Google Guava –期货
  6. 什么是MSTP(多业务传输平台)?
  7. node那点事(二) -- Writable streams(可写流)、自定义流
  8. 生日小助手的详细规划——本博文随时更新,持续有效……
  9. django html中文乱码,如何使用Python/Django执行HTML解码/编码?
  10. 猝死理赔年轻化,恶性肿瘤仍为头号健康“杀手”
  11. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 B. Tomb Raider(二进制枚举)
  12. Oracle数据库开启Huge Page
  13. 微信“小程序”要来了,简单点,解释的方式简单点
  14. Premiere pro在图片中插入视频元素
  15. C++约瑟夫环改良版
  16. 在OpenCV里实现WHT变换1
  17. 数据分析实习代码总结【进阶】Python
  18. (云服务器+JQuery+JS+BootStrap+Navicat+AJAX+JavaScript)第一个前端小项目【面试】
  19. 微信小程序支付(建行支付)
  20. 53 张图详解防火墙的 55 个知识点

热门文章

  1. tf.graph函数
  2. Python系列之入门篇——HDFS
  3. Atitit.vod 视频播放系统 影吧系统的架构图 架构体系 解决方案
  4. AngularJS入门之数据绑定
  5. Android导航栏ActionBar的具体分析
  6. 技能系统设计笔记 3
  7. Vuejs 条件判断
  8. IplImage, CvMat, Mat 的关系和相互转换(转)
  9. 编码,charset,乱码,unicode,utf-8与net简单释义
  10. 引用参数与引用返回值