微服务SpringCloud项目:用Mybatis-Plus写一个代码生成器子项目

愿天堂没有BUG

共 8122字,需浏览 17分钟

 · 2021-09-26


前言

心态好了,就没那么累了。心情好了,所见皆是明媚风景。
复制代码

“一时解决不了的问题,那就利用这个契机,看清自己的局限性,对自己进行一场拨乱反正。”正如老话所说,一念放下,万般自在。如果你正被烦心事扰乱心神,不妨学会断舍离。断掉胡思乱想,社区垃圾情绪,离开负面能量。心态好了,就没那么累了。心情好了,所见皆是明媚风景。

PS:先出个 Gradle 版本的生成器,后面我会把他集成到 springcloud 项目中去,欢迎关注哦!

🚀先上一下 git 地址

传送门

🚓进入正题

1. 创建项目我就不讲了

2. 引入依赖,如下所示-- Maven 版本的后面也出一个

plugins {
id 'java-library'
id 'org.springframework.boot' version '2.2.1.RELEASE'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}

group 'com.cyj.codegen'
version '1.0.0'

apply plugin: 'idea'
apply plugin: 'java-library'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'org.springframework.boot'

// 指定JDK版本
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
// 指定编码格式
[compileJava,compileTestJava,javadoc]*.options*.encoding = 'UTF-8'

// 源文件配置
// sourceSets.main.resources.srcDirs = ["src/main/java","src/main/resources"]

// 源文件配置
sourceSets {
main {
java.srcDir('src/main/java')
resources.srcDir('src/main/resources')
}
test {
java.srcDir('src/test/java')
resources.srcDir('src/test/resources')
}
}


sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
mavenLocal()
maven {
url 'https://maven.aliyun.com/repository/public/'
}
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
mavenCentral()
}

// 依赖的版本号进行统一控制
ext {
springBootVar = '2.2.1.RELEASE'
springBootMybatis = '2.1.3'
httpClient = '4.5.2'
mysql = '5.1.21'
junit = '4.12'
fastJson = '1.2.75'
guava = '27.0-jre'
hutoolVersion = '5.6.6'
druidVer = '1.1.21'
swagger2 = '2.9.2'
swagger2UI = '2.9.2'
swaggerBootstrapUI = '1.9.6'
knife4j = '2.0.8'
}

dependencies {
compile('org.apache.commons:commons-lang3:3.11')
compile('org.apache.commons:commons-collections4:4.4')
// 引入 mybatis-plus 依赖包
compile('com.baomidou:mybatis-plus-boot-starter:3.3.2')
// 引入 SpringBootWeb 依赖包
compile("org.springframework.boot:spring-boot-starter-web:${springBootVar}")
// SpringBoot 核心依赖引入
compile("org.springframework.boot:spring-boot-starter:${springBootVar}") {
// 排除tomcat
exclude module: "tomcat-embed-el"
}
// SpringBootMybatis 依赖引入
compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:${springBootMybatis}")
//httpclient 相关依赖
compile("org.apache.httpcomponents:httpclient:${httpClient}")
// 引入数据库链接驱动 mysql-connector-java 依赖
compile("mysql:mysql-connector-java")
// 引入 SpringDataJpa 依赖
compile("org.springframework.boot:spring-boot-starter-data-jpa:${springBootVar}")
// 引入 Druid 依赖
compile("com.alibaba:druid-spring-boot-starter:${druidVer}")
// 引入 pool 依赖
compile("org.apache.commons:commons-pool2")
// 引入 swagger2 依赖
compile("io.springfox:springfox-swagger2:${swagger2}")
// 引入 swagger2UI 依赖
compile("io.springfox:springfox-swagger-ui:${swagger2UI}")
// 引入 优化的 swagger2UI 依赖 https://xiaoym.gitee.io/knife4j/documentation
compile("com.github.xiaoymin:knife4j-spring-boot-starter:${knife4j}")
// 引入下多数据源 dynamic
compile('com.baomidou:dynamic-datasource-spring-boot-starter:3.3.2')
// 引入 jasypt 依赖包
// compile('org.jasypt:jasypt:1.9.2')
implementation 'commons-configuration:commons-configuration:1.10'
implementation 'org.apache.velocity:velocity:1.7'
// json 相关依赖
compile("com.alibaba:fastjson:${fastJson}")
implementation "com.google.guava:guava:${guava}"
implementation "cn.hutool:hutool-all:${hutoolVersion}"
compileOnly 'javax.servlet:javax.servlet-api:4.0.1'
implementation 'org.springframework.boot:spring-boot-configuration-processor'
// 数据库密码加密
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:2.1.0'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}

//修改gradle 构建编码为UTF-8
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}

test {
useJUnitPlatform()
}
复制代码

3. 修改启动类--这顶扫描的mapper存放位置

package com.cyj.codegen;

import cn.hutool.core.date.DateUtil;
import com.cyj.codegen.common.Constants;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
* @Description: 启动类
* @BelongsProject: MybatisPlusCodeGenDemo
* @BelongsPackage: com.cyj.codegen
* @Author: ChenYongJia
* @CreateTime: 2021-09-03 09:41
* @Email: chen87647213@163.com
* @Version: 1.0
*/

@Slf4j
@MapperScan("com.cyj.codegen.mapper")
@SpringBootApplication(scanBasePackages = {Constants.SCAN_BASE_PACKAGES})
public class CodeGenApplication {

/**
* 项目启动方法
*
* @param args the input arguments
* @date 2021-9-3 14:15:42
* @author Sunny Chen
*/

public static void main(String[] args) {
log.info("Mybatis-plus代码生成器项目开始启动ing!======>{}", DateUtil.now());
SpringApplication.run(CodeGenApplication.class, args);
log.info("Mybatis-plus代码生成器项目启动成功ing.......!======>{}", DateUtil.now());
}

}
复制代码

4. 创建数据库--执行静态资源下的 pig_codegen.sql 文件

5. 添加一个骚气的 banner.txt 你是一个好孩子

   _  _                                                              __ _                      _             _                _  _
| || | ___ _ _ o O O __ _ _ _ ___ o O O / _` | ___ ___ __| | o O O | |__ ___ | || |
_, | / _ \ | +| | o / _` | | '_| / -_) o __, | / _ \ / _ \ / _` | o | '_ \ / _ \ _, |
_|__/ ___/ _,_| TS__[O] __,_| _|_|_ ___| TS__[O] |___/ ___/ ___/ __,_| TS__[O] |_.__/ ___/ _|__/
_| """"|_|"""""|_|"""""| {======|_|"""""|_|"""""|_|"""""| {======|_|"""""|_|"""""|_|"""""|_|"""""| {======|_|"""""|_|"""""|_| """"|
"
`-0-0-'"`-0-0-'"`-0-0-'./o--000'"`-0-0-'"`-0-0-'"`-0-0-'./o--000'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'./o--000'"`-0-0-'"`-0-0-'"`-0-0-'
复制代码

6. 创建数据库全局常量类 DataSourceConstantsConstants

注意修改 DS_DRIVER 参数,区分5.7.x和8.0.x 版本,修改 SCAN_BASE_PACKAGES 参数用以扫描你的包路径

package com.cyj.codegen.common;

/**
* @Description: 数据库常量
* @BelongsProject: MybatisPlusCodeGenDemo
* @BelongsPackage: com.cyj.codegen.common
* @Author: ChenYongJia
* @CreateTime: 2021-09-03 10:34
* @Email: chen87647213@163.com
* @Version: 1.0
*/

public interface DataSourceConstants {

/**
* 数据源名称
*/

String DS_NAME = "name";

/**
* 默认驱动--mysql8 加 cj
*/

String DS_DRIVER = "com.mysql.cj.jdbc.Driver";

/**
* 默认数据源(master)
*/

String DS_MASTER = "master";

/**
* jdbcurl
*/

String DS_JDBC_URL = "url";

/**
* 用户名
*/

String DS_USER_NAME = "username";

/**
* 密码
*/

String DS_USER_PWD = "password";

}
复制代码

7. 校验异常类 CheckedException

@NoArgsConstructor
public class CheckedException extends RuntimeException {

private static final long serialVersionUID = 1L;

public CheckedException(String message) {
super(message);
}

public CheckedException(Throwable cause) {
super(cause);
}

public CheckedException(String message, Throwable cause) {
super(message, cause);
}

public CheckedException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}

}
复制代码

8. 配置 Swagger 我就不讲了

9. 在 model 下创建实体类

列实体对象--ColumnEntity,生成器配置实体对象--GenConfig,多数据源--GenDatasourceConf,生成记录表--GenFormConf,表属性--TableEntity

PS:组合形成基础的生产器基础结构。

10. service 层用于实现这些类的增删改查等基础操作

11. 代码生成器帮助类--CodeGenUtils 重点

getTemplates 方法用于获取配置--也就是我们写得 .vm 生成模板generatorCode 方法用于生成代码renderData 方法用于渲染数据columnToJava 方法用于表名转换成Java类名getConfig 方法用于获取我们的配置信息getFileName 方法用于获取文件名

12. 关于配置资源下的 template

里面的 .vm 文件中通过 velocity 来获取变量名称,更多的用法可以自行百度查询使用。

13. 当然请注意修改 generator.properties 文件里的包路径和数据类型哦

14. 演示下生成代码

因为篇幅原因,这里只演示代码生成,其他接口也都给出了可以自行测试查看效果

最后感谢大家耐心观看完毕,原创不易,留个点赞收藏是您对我最大的鼓励!


作者:Sunny_Chen
链接:https://juejin.cn/post/7011722064168452110
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


浏览 48
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报