真是世事无常大肠包小肠,我是你们的老朋友张豪杰!!!
废话不多说,整活!!
最后的效果图
- 添加依赖
<!--mybatis-plus的springboot支持-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!-- 代码生成器模板-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- 代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.2</version>
</dependency>
<!-- swagger我的springboot是2.7.3的所以用的3.00的swagger如果你最后swagger不能使那你自己解绝吧哈哈-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
- yml的配置
server:
port: 5771
spring:
mvc: # 这个用swagger3.0.0必须配置
pathmatch:
matching-strategy: ant_path_matcher
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 132456
url: jdbc:mysql://localhost:3306/businessSoftware?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai
# 初始化时建立的物理连接数。初始化发生在显式调用init方法,或者第一次getConnection时.
initial-size: 5
# 连接池最大物理连接数量。
max-active: 50
# 连接池最小物理连接数量。
min-idle: 5
# 获取连接时最大等待时间,单位为毫秒。
# 配置之后,缺省启用公平锁,并发效率会有所下降,若需要可以通过配置useUnfairLock属性为true使用非公平锁。
max-wait: 6000
# 是否缓存preparedStatement,也就是PSCache。
# PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
pool-prepared-statements: true
# 要启用PSCache,其值必须大于0,当大于0时,poolPreparedStatements自动触发修改为true。
# 在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100。
max-pool-prepared-statement-per-connection-size: 20
# 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。
# 如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
validation-query: select 1 from dual
# 检测连接是否有效的超时时间,单位为秒。
# 底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法。
# validation-query-timeout: 30
# 有两个含义:
# 1) Destroy线程会检测连接的间隔时间,若连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。
# 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明。
time-between-eviction-runs-millis: 60000
# 连接保持空闲而不被驱逐的最长时间。
min-evictable-idle-time-millis: 300000
# 建议配置为true,不影响性能,并且保证安全性。
# 申请连接的时候检测,若空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
test-while-idle: true
# 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
test-on-borrow: false
# 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
test-on-return: false
# 类型是字符串,通过别名的方式配置扩展的拦截器插件,常用的拦截器插件有:
# 监控统计用的filter:stat,日志用的filter:log4j,防御sql注入攻击的filter:wall,三个同时配置的化,用逗号隔开。
# 注意,Druid中的filter-class-names配置项是不起作用的,必须采用filters配置项才可以。
filters: stat,wall,log4j2
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录。
connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
use-global-data-source-stat: true
# 创建在resources目录下 ->创建mapper目录->创建xxx.xml文件
mybatis-plus:
mapper-locations: classpath*:/mapper/*.xml
# 数据库支持id唯一
global-config:
id-type: ASSIGN_ID
capital-mode: false
-
将官方jar包里的模板放到自己项目的/resources/templates目录下(并按这自己的需求在这些模板里进行改动)
例如我们项目中用到了swagger那咱可以在controller.java.ftl中引入swagger,并使用@Api等等。。
同理我们在 其他的模板中也可以随意的规则的去改的。 -
编辑代码生成器类
package com.mepowersoft.businessSoftware;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.IFill;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Component
public class GenareterCode {
public static void main(String[] args) {
// 生产文件的项目相对位置
StringBuffer projectPath = new StringBuffer();
// 获取系统路径
String systemPath = System.getProperty("user.dir");
// 将反斜杠全部替换为双斜杠 并拼接项目路径
projectPath.append(systemPath.replaceAll("\\\\", "//"));
System.out.println(projectPath);
//entity表字段属性List,用于生成时间自动填充属性
List<IFill> iFills = new ArrayList<>();
iFills.add(new Column("create_time", FieldFill.INSERT));
iFills.add(new Column("update_time", FieldFill.INSERT_UPDATE));
FastAutoGenerator.create("jdbc:mysql://localhost:3306/businessSoftware?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai", "root", "123456")
.globalConfig(builder -> {
builder
.author("zhj") // 设置作者
.enableSwagger() // 开启 swagger 模式
//.fileOverride() // 覆盖已生成文件
.outputDir(projectPath + "//src//main//java")// 指定输出目录
.disableOpenDir();// 生成代码后不打开输出目录
})
.packageConfig(builder -> {
builder.parent("com.mepowersoft") // 设置父包名
.moduleName("businessSoftware") // 设置父包模块名
.entity("entity")
.controller("controller") // Controller 包名 默认值:controller
.other("util") // 自定义文件包名 输出自定义文件时所用到的包名
.pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "//src//main//resources//mapper")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude(getTables(scanner("请输入表名,多个英文逗号分隔?所有输入 all:"))) // 设置需要生成的表名
.addTablePrefix("base_")// 设置过滤表前缀
.entityBuilder().addTableFills(iFills)//生成时间自动填充属性
.controllerBuilder().enableRestStyle()//开启@RestController风格
.serviceBuilder().formatServiceFileName("%sService"); //去掉默认的I前缀
})
//使用Freemarker引擎模板,默认的是Velocity引擎模板
.templateEngine(new FreemarkerTemplateEngine())
//设置自定义模板路径
.templateConfig(builder -> {
builder.controller("/templates/controller.java");
})
.execute();
}
/**
* 读取控制台内容
*/
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append(tip);
System.out.println(help.toString());
if (scanner.hasNext()) {
String ipt = scanner.next();
if (
StringUtils.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
/**
* 处理 all 情况
*/
protected static List<String> getTables(String tables) {
return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
}
}
到这里将上面的类里的配置重写完,运行main方法会出现下图直接输入all会将数据库中的所有表都生成的
ok现在重载一下项目
看 我们的项目框架 就自动生成好了!!!
咱自己可以在启动类上加上mapper的扫描注解
这时在生成好的代码框架中加上swagger的配置类
package com.mepowersoft.businessSoftware.config.swagger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
// 访问地址:localhost:5771/swagger-ui
public class SwaggerConfig {
// api接口包扫描路径
public static final String SWAGGER_SCAN_BASE_PACKAGE = "com.mepowersoft.businessSoftware.controller";
// 接口文档版本
public static final String VERSION = "1.0.0";
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
//用于分组功能,也可以不配置
//注册整体api信息
.apiInfo(apiInfo())
//swagger功能是否启用,可以通过配置设置,也可以先写死
.enable(true)
.select()
.apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("摩嵌商用软件")
.description("乱七八杂的功能都有,天津魔嵌动力技术有限公司就是牛逼!")
.contact(new Contact("摩嵌动力", "http://mepower.com.cn", "mo_embeddedpower@vip.163.com"))
.version(VERSION)
.build();
}
}
最后访问 ip:端口/swagger-ui/
最后大家都骄傲的歇歇忙了半天了不是,觉得有用请给个好评哈哈!!!