特别说明:本次项目整合基于idea进行的,如果使用Eclipse可能操作会略有不同,不过总的来说不影响。
springboot整合之如何选择版本及项目搭建
springboot整合之版本号统一管理
springboot整合mybatis-plus+durid数据库连接池
springboot整合swagger
springboot整合mybatis代码快速生成
springboot整合之统一结果返回
springboot整合之统一异常处理
springboot整合之logback日志配置
springboot整合pagehelper分页
springboot整合本地缓存
springboot整合redis + redisson
springboot整合elasticsearch
springboot整合rabbitMq
springboot整合canal实现缓存一致性
springboot整合springSecurity(前后端不分离版本)
一、为什么要使用逆向代码生成
1.代码快速生成
使用mybatis代码快速生成,能够帮我们快速逆向生成实体类、mapper、service以及controller这些基础代码。特别是当我们的项目有很多表时它能够帮助我们节省很多时间,极大的提升我们的开发效率。举个例子来说,假设我们有30张表,如果手动创建所有实体类,mapper,service以及controller再加注释的话,那么就算很快一张表也得2分钟左右吧。那这样算下来就要1个小时了。但是我们使用快速代码生成只需要2分钟就可以操作好。
2.避免拼写错误
小伙伴们应该斗深有体会,那就是很多时候我们会出现代码拼写错误。比如user有时候写成了uesr。如果我们不适用快速代码,那我们就按照上面所说的30张表来算,那最低也要创建120个类或者接口。这么大的量我觉得真没办法保证一点错都不出。所以从这个角度来说我觉得引入mybatis能够帮助我们避免很多不必要的错误拼写。
好了,接下来我们就进入今天的正题,接着使用原来项目进行今天的整合---mybatis快速代码生成。
二、pom坐标导入
这里我只粘贴了本此需要导入的依赖。一共是两个jar包。一个是mybatis-plus-generator一个是velocity-engine-core。
<!--版本依赖管理-->
<properties>
<mybatis-plus-gene.version>3.4.1</mybatis-plus-gene.version>
<velocity.version>2.0</velocity.version>
</properties>
<!--mybatis-plus 逆向生成-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus-gene.version}</version>
</dependency>
<!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>${velocity.version}</version>
</dependency>
有一点需要说明一下,因为我们使用的mybatis-plus时3.4.2版本的,但是我去查找mybatis逆向代码依赖时,没有查到对应版本。所以我就选择了一个接近的然后使用人数相对多一点的版本。经过测试没啥问题,小伙伴们可以放心使用。
三、编写逆向代码工具类
因为代码比较少而且相对简单,所以我把所有的注释都加在类里了。这样也更方便大家理解。具体位置如下。
逆向生成代码类代码:
package com.example.springbootdemo;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
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.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.Test;
/**
* @description: CodeGenerator <br>
* @date: 2022/12/25 14:19 <br>
* @author: William <br>
* @version: 1.0 <br>
*/
public class CodeGenerator {
@Test
public void run() {
// 1、创建代码生成器
AutoGenerator mpg = new AutoGenerator();
// 2、全局配置
GlobalConfig gc = new GlobalConfig();
//获取当前项目的路径
String projectPath = System.getProperty("user.dir");
//拼接代码生成以后存放的目录
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("William");
//生成后是否打开资源管理器
gc.setOpen(false);
//重新生成时文件是否覆盖
gc.setFileOverride(true);
//去掉Service接口的首字母I
gc.setServiceName("%sService");
//主键策略
gc.setIdType(IdType.AUTO);
//定义生成的实体类中日期类型
gc.setDateType(DateType.ONLY_DATE);
//开启Swagger2模式
gc.setSwagger2(true);
mpg.setGlobalConfig(gc);
// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
// 4、包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.example.springbootdemo");
//pc.setModuleName("user"); //模块名,多模块开发,或者微服务模块使用,也可以配置接口版本号,例如:v1
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
//需要逆向的表名
strategy.setInclude("user");
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
//strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
strategy.setRestControllerStyle(true); //restful api风格控制器
strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
mpg.setStrategy(strategy);
// 6、执行
mpg.execute();
}
}
使用也比较简单,我们只需要修改数据库相关配置,然后把需要逆向的表配置好,直接运行就行了。
//需要逆向的表名
strategy.setInclude("user","order","goods");
这里做一下说明,就是这里可以配置多张表,只要用逗号隔开就行了。
四、测试逆向代码生成
我们可以先把原来的entity、mapper、service、controller这四个包先删除。删除以后结构如下:
然后运行我们的逆向代码工具类。
可以看到成功运行后,我们的代码以及包结构都帮我们生成了。是不是很方便。这样即使我们项目表很多也只需要运行一下就会帮我们全部生成了。
五、启动测试
最后一步,老规矩,就是启动测试一下,看看我们的项目能不能正常启动,然后再写一个测试类。测试一下。测试方法就直接写在了UserController里面了。
package com.example.springbootdemo.controller;
import com.example.springbootdemo.entity.User;
import com.example.springbootdemo.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.bytebuddy.asm.Advice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 前端控制器
* </p>
*
* @author William
* @since 2022-12-25
*/
@Api(tags = "用户相关接口")
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@ApiOperation(value = "根据用户ID获取用户信息")
@GetMapping("/{id}")
public String getUser(@PathVariable("id") Integer id){
if(id == null || id <= 0){
return "参数错误!";
}
User user = userService.getById(id);
if(user == null){
return "当前用户不存在,参数错误";
}
return user.toString();
}
}
正常启动没有问题。那我们接下来就测试一下是不是数据库查询也能正常运行。我们访问http://localhost:8080/doc.html
进行测试。
最终测试顺利通过,没有什么问题。OK到这里我们就算正式完成了我们的整合了。在项目开发初期我们就可以使用这种方式进行快速代码生成。
个人建议,如果逆向完成了可以删除掉这个逆向依赖的jar包以及逆向的代码。因为逆向完成以后这两个包就没用了,打包部署时会占用内存,留着没有必要。
希望对大家有所帮助,如果喜欢请关注点赞呦~谢谢啦