MyBatis-Plus 可视化代码生成器来啦,让你的开发效率大大提速!!
Posted Java技术栈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis-Plus 可视化代码生成器来啦,让你的开发效率大大提速!!相关的知识,希望对你有一定的参考价值。
前言
在基于Mybatis的开发模式中,很多开发者还会选择Mybatis-Plus来辅助功能开发,以此提高开发的效率。虽然Mybatis也有代码生成的工具,但Mybatis-Plus由于在Mybatis基础上做了一些调整,因此,常规的生成工具生成的代码还有一些不太符合预期。而且对于多数据库的支持不是很好。
因此,我们需要一款支持高度定制化,带图形UI页面,能适配多数数据库的基础程序生成框架。本文就介绍这款基于Mybatis-Plus的代码自助生成器,github地址:mybatis-plus-generator-ui。
文章通过实例集成的方式来详细讲解mybatis-plus-generator-ui,感兴趣的朋友可以自己clone下来,也可以自己进行扩展自定义。
一、mybatis-plus-generator-ui是什么?
它是对mybatis-plus-generator进行封装,通过Web UI快速生成兼容Spring boot,mybatis-plus框架的各类业务代码。提供交互式的Web UI用于生成兼容mybatis-plus框架的相关功能代码,包括Entity、Mapper、Mapper.xml、Service、Controller等,可以自定义模板以及各类输出参数,也可通过SQL查询语句直接生成代码。
功能列表:
- Table查询: 查询配置的关系型数据库表的列表查询。
- 输出配置: 对需要生成的相关代码,比如Entity、Mapper、Servcie、Controller等代码模板信息进行配置,用于在转换时调用。
- 项目导入: 可以导入其它项目配置好的信息给本项目使用。
- 下载模板: 支持本项目配置的模板信息下载后共享。
- 策略配置: 直接定义各种文件的生成策略。
- 模板上传: 支持从别的项目中下载模板,同上传供本项目使用。
- SQL输入上传: 支持将查询语句直接上传或者复制到输入框中。
- SQL代码生成: 基于SQL脚本生成相应的代码。
二、 mybatis-plus-generator-ui怎么用?
mybatis-plus-generator-ui提供以jar包的形式为外部项目提供服务,通过配置的数据库配置去读取数据库的配置信息,并通过Web UI的方式提供给开发者使用。mybatis-plus-generator-ui支持POSTGRE_SQL、ORACLE、DB2、MySQL、SQLSERVER等常见的关系型数据库。
推荐一个开源免费的 Spring Boot 最全教程:
1、maven pom引入
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yelang</groupId>
<artifactId>mybatis-plus-generator-ui-case</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.github.davidfantasy</groupId>
<artifactId>mybatis-plus-generator-ui</artifactId>
<version>1.4.5</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.25</version>
</dependency>
</dependencies>
</project>
2、新建程序入口,以main函数的方式运行
mybatis-plus-generator-ui在1.4.0版本之后,可支持将GeberatorUIServer独立部署为一个单独的spring boot项目,通过页面指定目标项目根目录的方式为多个项目提供源码生成服务。这种方式适用于有多个项目库需要独立进行开发的模式。实例关键代码如下:
package com.yelang;
import com.github.davidfantasy.mybatisplus.generatorui.GeneratorConfig;
import com.github.davidfantasy.mybatisplus.generatorui.MybatisPlusToolsApplication;
import com.github.davidfantasy.mybatisplus.generatorui.mbp.NameConverter;
public class GeneratorMain
public static void main(String[] args)
GeneratorConfig config = GeneratorConfig.builder().jdbcUrl("jdbc:postgresql://127.0.0.1:5432/ghyapp")
.userName("ghy01").password("ghy01").driverClassName("org.postgresql.Driver")
// 数据库schema,POSTGRE_SQL,ORACLE,DB2类型的数据库需要指定
// .schemaName("myBusiness")
// 如果需要修改各类生成文件的默认命名规则,可自定义一个NameConverter实例,覆盖相应的名称转换方法:
.nameConverter(new NameConverter()
/**
* 自定义Service类文件的名称规则
*/
public String serviceNameConvert(String tableName)
return this.entityNameConvert(tableName) + "Service";
/**
* 自定义Controller类文件的名称规则
*/
public String controllerNameConvert(String tableName)
return this.entityNameConvert(tableName) + "Action";
).basePackage("com.github.davidfantasy.mybatisplustools.example").port(8068).build();
MybatisPlusToolsApplication.run(config);
在上面的配置中,我们连接的示例数据库是PostgerSQL,需要在Maven中定义相应的驱动程序,并且在上述代码中正确配置相应的类。最后指定了程序的运行端口为8086,这种运行方式跟SpringBoot非常相似。
3、实例运行
运行以上的main方法,在控制台可以看到以下输出即为成功部署。
在输出的日志中,可以看到程序的运行端口,以及默认的模板目录地址。在浏览器中输入访问地址http://localhost:8068/,即可进行配置生成。
三、mybatis-plus-generator-ui代码生成
1、Table的查询和浏览
可以直接浏览和查询配置的数据源的数据表信息,可选择一个或多个生成模板代码。
2、输出配置
内置Entity、Mapper、Service、Controller等6种类型代码的模板配置,可以上传模板进行替换,并修改各类参数,配置参数已经按照影响的文件类型重新进行了分类,并加入了部分文本说明;也可以自行添加其它类型的自定义输出文件。所有的配置项都会按照项目包名进行保存,只需一次性设置就可以了。
3、策略配置
将每次生成代码时可能变动的内容加入到代码生成选项中,方便调整每次的生成策略,比如:是否覆盖原文件,生成文件的种类等等:
4、SQL配置生成
通过输入查询SQL,可自动在Mapper(Xml及Java)中生成对应的查询方法,DTO对象和ResultMap(结果集映射配置)
5、代码生成
四、自定义扩展
1、相关模板调整
在相关的页面中,可以进行相应的调整,在对应的btl模板中下载对应文件的具体模板,使用文本工具打开,直接修改源代码,文中取一种方式示例,其它方式一样。
2、代码层级的配置
在一些团队中,肯定对Mapper的定义为Dao,Controller层需要定义为Action,通过修改代码模板btl的方式是可以的,还有一种方式是通过调整内部映射的方式来进行修改。主要使用的类是NameConverter。
/**
* 自定义Service类文件的名称规则
*/
public String serviceNameConvert(String tableName)
return this.entityNameConvert(tableName) + "Service";
/**
* 自定义Controller类文件的名称规则
*/
public String controllerNameConvert(String tableName)
return this.entityNameConvert(tableName) + "Action";
除了Service、Controller、Entity、FieldName都可以实现自定义的扩展。下面是NameConverter类的核心代码,这里有详细的定义。
package com.github.davidfantasy.mybatisplus.generatorui.mbp;
import cn.hutool.core.util.StrUtil;
import com.github.davidfantasy.mybatisplus.generatorui.dto.Constant;
import com.google.common.base.Strings;
import static com.github.davidfantasy.mybatisplus.generatorui.dto.Constant.DOT_JAVA;
import static com.github.davidfantasy.mybatisplus.generatorui.dto.Constant.DOT_XML;
/**
* 自定义各类名称转换的规则
*/
public interface NameConverter
/**
* 自定义Entity.java的类名称
*
* @param tableName 表名称
* @return
*/
default String entityNameConvert(String tableName)
if (Strings.isNullOrEmpty(tableName))
return "";
tableName = tableName.substring(tableName.indexOf(StrUtil.UNDERLINE) + 1, tableName.length());
return StrUtil.upperFirst(StrUtil.toCamelCase(tableName.toLowerCase()));
/**
* 自定义表字段名到实体类属性名的转换规则
*
* @param fieldName 表字段名称
* @return
*/
default String propertyNameConvert(String fieldName)
if (Strings.isNullOrEmpty(fieldName))
return "";
if (fieldName.contains("_"))
return StrUtil.toCamelCase(fieldName.toLowerCase());
return fieldName;
/**
* 自定义Mapper.java的类名称
*/
default String mapperNameConvert(String tableName)
return entityNameConvert(tableName) + "Mapper";
/**
* 自定义Mapper.xml的文件名称
*/
default String mapperXmlNameConvert(String tableName)
return entityNameConvert(tableName) + "Mapper";
/**
* 自定义Service.java的类名称
*/
default String serviceNameConvert(String tableName)
return "I" + entityNameConvert(tableName) + "Service";
/**
* 自定义ServiceImpl.java的类名称
*/
default String serviceImplNameConvert(String tableName)
return entityNameConvert(tableName) + "ServiceImpl";
/**
* 自定义Controller.java的类名称
*/
default String controllerNameConvert(String tableName)
return entityNameConvert(tableName) + "Controller";
/**
* 自定义其它生成文件的文件名(不包括entity,mapper.java,mapper.xml,service,serviceImpl,controller这6种)
*
* @param fileType 在页面上输入的输出文件标识
* @param tableName 关联的数据表名称名称
* @return 生成文件的名称,带后缀
*/
default String outputFileNameConvert(String fileType, String tableName)
if (fileType.equals(Constant.FILE_TYPE_ENTITY))
return this.entityNameConvert(tableName) + DOT_JAVA;
else if (fileType.equals(Constant.FILE_TYPE_MAPPER))
return this.mapperNameConvert(tableName) + DOT_JAVA;
else if (fileType.equals(Constant.FILE_TYPE_MAPPER_XML))
return this.mapperXmlNameConvert(tableName) + DOT_XML;
else if (fileType.equals(Constant.FILE_TYPE_SERVICE))
return this.serviceNameConvert(tableName) + DOT_JAVA;
else if (fileType.equals(Constant.FILE_TYPE_SERVICEIMPL))
return this.serviceImplNameConvert(tableName) + DOT_JAVA;
else if (fileType.equals(Constant.FILE_TYPE_CONTROLLER))
return this.controllerNameConvert(tableName) + DOT_JAVA;
return this.entityNameConvert(tableName) + fileType;
mybatis-plus-generator-ui的功能非常丰富,甚至针对ui都是可以自定义修改的。如果需要定制UI的话,将代码clone下来后,进入到frontend目录下,进行相应的扩展开发。
修改完成后,需要另行编译src\\frontend中的静态资源(源码中不包含已编译的页面),在src\\frontend文件夹中执行:
yarn install
yarn run build
五、总结
以上就是今天要讲的内容,本文简要介绍一款基于Mybatis-Plus的代码自助生成器,地址:
文章通过实例集成的方式来详细讲解mybatis-plus-generator-ui,从相关概念到实际集成案例,以及具体的扩展开发介绍。如果在工作中有这种需要,不妨采用这种方式。希望本文对您有所帮助,欢迎指导交流。
原文链接:https://blog.csdn.net/yelangkingwuzuhu/article/details/128077533
版权声明:本文为CSDN博主「夜郎king」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
近期热文推荐:
1.1,000+ 道 Java面试题及答案整理(2022最新版)
4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!
觉得不错,别忘了随手点赞+转发哦!
详解:MyBatis-Plus 代码生成器的使用
文章目录
使用之前先了解MyBatis-Plus官方文档的介绍:
一、入门介绍:
通过了解官方文档后,实现代码生成器需要配置六大步骤:
- DataSourceConfig(数据源配置,通过该配置,指定需要生成代码的具体数据库)
- StrategyConfig(数据库表配置,通过该配置,可指定需要生成哪些表或者排除哪些表)
- PackageConfig(包名配置,通过该配置,指定生成代码的包路径)
- TemplateConfig(模板配置,可自定义代码生成的模板,实现个性化操作)
- GlobalConfig(全局策略配置)
- InjectionConfig(注入配置,通过该配置,可注入自定义参数等操作以实现个性化操作)
二、代码案例:
详细步骤(可以全程复制, 需要改动的地方会有说明)
1、引入MyBatis-Plus相关依赖(在搭建完成的springboot项目的基础上)
如果还需要自动生成Swagger相关的注解, 自行引入Swagger相关依赖即可
<!--mybatis-plus, 注意引入了此依赖就无需再引入mybatis相关依赖, 否则可能冲突-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!--mybatis-plus代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.0</version>
</dependency>
<!--默认模板引擎velocity, 还支持Freemarker、Beetl, 都需要引入依赖(使用其他引擎详情见官网)-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.5.1</version>
</dependency>
<!-- 整合springfox-swagger、springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
2、编写MyBatis-Plus代码生成器代码
一般情况需要改动的地方已在注释中写出, 复制粘贴稍加改动即可, 其余代码配置也有较为详细的注释, 可根据需要自行修改。
package com.lx.common;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
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.*;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.ArrayList;
import java.util.List;
/**
* 代码生成器
* 一般情况, 需要改动的地方:
* 作者,
* 数据源相关,
* 生成的代码路径,
* 需要映射的表名
*
*/
public class CodeGenerator
public static void main(String[] args)
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局策略配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir"); // 项目路径
gc.setOutputDir(projectPath + "/src/main/java"); // 生成的文件路径
gc.setAuthor("lx");//作者,开发人员
gc.setOpen(false); // 是否打开生成的目录
gc.setFileOverride(true); // 是否覆盖已有文件, 默认false
gc.setServiceName("%sService"); // service 命名方式,自动生成的Service类前面会自动加前缀I, 这里( %s 为占位符)取消I前缀
gc.setIdType(IdType.AUTO); // 指定生成的主键的ID类型
gc.setDateType(DateType.ONLY_DATE); // 数据库中的时间类型对应的java类, 此设置表示Date类, 默认是java8的时间类
gc.setSwagger2(true); //实体属性 Swagger2 注解,需要配置Swagger2依赖
mpg.setGlobalConfig(gc);
// 数据源配置,通过该配置,指定需要生成代码的具体数据库
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://127.0.0.1:3306/test1?serverTimezone=GMT");//驱动连接的URL
dsc.setDriverName("com.mysql.cj.jdbc.Driver");//驱动名称
dsc.setUsername("root");//数据库连接用户名
dsc.setPassword("root");//数据库连接密码
dsc.setDbType(DbType.MYSQL); // 设置数据库连接的类型
mpg.setDataSource(dsc);
// 包名配置,通过该配置,指定生成代码的包路径
PackageConfig pc = new PackageConfig();
pc.setModuleName(null); // 模块路径(子路径)
pc.setParent("com.lx"); // 生成的代码的父路径
pc.setEntity("entity"); // 生成实体类所在的包名
pc.setMapper("mapper");
pc.setService("service");
pc.setController("controller");
mpg.setPackageInfo(pc);
// 数据库表配置,通过该配置,可指定需要生成哪些表或者排除哪些表
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("user"); // 要生成的表在数据库中的名称, 每张表名以英文逗号隔开,例: ("user","system_log")
strategy.setNaming(NamingStrategy.underline_to_camel); // 表名转换方式: 数据库中的下划线转成java驼峰
strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 列名转换方式
strategy.setEntityLombokModel(true); // 自动加上lombok注解
strategy.setRestControllerStyle(true); // 加上@RestController注解
strategy.setEntityTableFieldAnnotationEnable(true); // 为实体类的类上加@TableName, 所有字段上加注解
strategy.setControllerMappingHyphenStyle(false); // RequestMapping种的驼峰是否转成用"-"连接, 默认是false
// strategy.setTablePrefix("tp_"); // 按照表名生成实体类时去掉表名前面的"tp_"前缀
// strategy.setLogicDeleteFieldName("deleted"); // 数据库中表示逻辑删除的字段名
// strategy.setVersionFieldName("version"); // 数据库中表示乐观锁版本号的字段名
// 自动填充配置: 插入时间, 最后一次更新时间
ArrayList<TableFill> tableFills = new ArrayList<>();
TableFill gmtCreate = new TableFill("created", FieldFill.INSERT); // 插入时改变的时间纪录, created为表的字段名
TableFill gmtModified = new TableFill("updated", FieldFill.INSERT_UPDATE); // 最后一次更新时updated表字段的时间记录
tableFills.add(gmtCreate);
tableFills.add(gmtModified);
strategy.setTableFillList(tableFills);
mpg.setStrategy(strategy);
// 注入配置,通过该配置,可注入自定义参数等操作以实现个性化操作(自定义配置, 将Mapper.xml文件生成到resources目录下)
InjectionConfig cfg = new InjectionConfig()
@Override
public void initMap()
// to do nothing
;
// 如果模板引擎是 velocity
String templatePath = "/templates/mapper.xml.vm";
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath)
@Override
public String outputFile(TableInfo tableInfo)
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + "/src/main/resources/mapper/"
+ "/" + tableInfo.getEntityName()
+ "Mapper"
+ StringPool.DOT_XML;
);
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 模板配置,可自定义代码生成的模板,实现个性化操作
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
mpg.execute();//执行
三、效果演示:
- 创建1张测试表: user
- 执行MyBatis-Plus代码生成器的代码
- 代码生成完成
以上是关于MyBatis-Plus 可视化代码生成器来啦,让你的开发效率大大提速!!的主要内容,如果未能解决你的问题,请参考以下文章