介绍
当前spring boot/mybatis/mybatis-plus/JPA等框架快速提升了开发效率,但是整体框架目前还存在一些问题,比如:
1.部分框架繁琐代码;
2.繁重的配置;
3.脚手架搭建完成之后重复性工作;
针对以上问题,节约建立目录和文件的时间,减少简单的增删改查、分页重复性工作时间(增删改查、分页),特地生成了简单的代码生成工具
效果展示
spring boot项目初步生成
利用代码工具生成
解决方案
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.2.0</version>
</dependency>
<!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
<!-- 基于模板和要改变的数据 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
在resources目录下创建文件 application.yml
#### application.yml
spring:
application:
name: service-edu
profiles:
active: dev
#### application-dev.yml
server:
port: 8001
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:com/MPG/service/*/mapper/*.xml
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8
username: root
password: root
hikari:
connection-test-query: SELECT 1
connection-timeout: 60000
idle-timeout: 500000
max-lifetime: 540000
maximum-pool-size: 12
minimum-idle: 10
pool-name: GuliHikariPool
jackson:
date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8
创建MP代码生成器
在test/java目录下创建代码生成器:CodeGenerator.java
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
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.rules.NamingStrategy;
import org.apache.commons.lang3.StringUtils;
import java.util.Scanner;
/**
* @author yed
* @file Spring
* @create 2022-06-06 9:11
*/
public class CodeGenerator {
public static void main(String[] args) {
// 代码生成器
AutoGenerator mybatisPlusCodeGenerator = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
// 先得到当前工程目录
String projectPath = System.getProperty("user.dir");
// 是maven项目的结构,就是工程目录 + /src/main/java
gc.setOutputDir(projectPath + "/src/main/java");
// 设置生成文件的作者信息
gc.setAuthor("Yed");
//当代码生成完成之后是否打开代码所在的文件夹
gc.setOpen(true);
gc.setFileOverride(false); //重新生成时文件是否覆盖
gc.setSwagger2(true); 实体属性 Swagger2 注解
gc.setServiceName("%sService");//去掉Service接口的首字母I
// 将上述的全局配置注入
mybatisPlusCodeGenerator.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dataSourceConfiguration = new DataSourceConfig();
dataSourceConfiguration.setUrl("jdbc:mysql://localhost:3306/spring?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC");
// dataSourceConfiguration.setSchemaName("public");
dataSourceConfiguration.setDriverName("com.mysql.cj.jdbc.Driver");
dataSourceConfiguration.setUsername("root");
dataSourceConfiguration.setPassword("123456");
mybatisPlusCodeGenerator.setDataSource(dataSourceConfiguration);
// 包配置
PackageConfig pc = new PackageConfig();
// 设置父级包名
pc.setParent("cn.echo42");//controller entity service service.impl
pc.setModuleName(scanner("模块名"));
//pc.setModuleName("sys");
// 实体类名称
pc.setEntity("domain");
// mapper包名称
pc.setMapper("mapper");
// mapper对应的映射器xml
pc.setXml("mapper.xml");
// 业务包层名称
pc.setService("service");
// 业务接口的实现类包
pc.setServiceImpl("service.impl");
// 控制器包名称
pc.setController("controller");
// 装填包信息对象
mybatisPlusCodeGenerator.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
//设置字段和表名的是否把下划线完成驼峰命名规则
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//设置生成的实体类继承的父类
//strategy.setSuperEntityClass("com.sxt.BaseEntity");
//是否启动lombok
strategy.setEntityLombokModel(true);
//是否生成resetController
strategy.setRestControllerStyle(true);
// 公共父类
//strategy.setSuperControllerClass("com.sxt.BaseController");
// 写于父类中的公共字段
//strategy.setSuperEntityColumns("person_id","person_name");
//要设置生成哪些表 如果不设置就是生成所有的表
//strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
strategy.setControllerMappingHyphenStyle(true);
//strategy.setTablePrefix(pc.getModuleName() + "_");
strategy.setTablePrefix("sys_");
mybatisPlusCodeGenerator.setStrategy(strategy);
mybatisPlusCodeGenerator.execute();
}
}
运行上述代码:
生成结果如下:
生成的目录结构
最终结果