SpringBoot+MyBatis-Plus+Swagger
文章目录
前言
提示:以下是本篇文章正文内容,下面案例可供参考
1. 新建springBoot项目
打开idea选择这个,注意jdk版本,下一步
填上包名项目名,选好jdk版本,下一步
象征性的选择一个web(根据自己的需求选择),下一步
创建完成后习惯性的run一下,看看能不能跑一起,一般情况都能跑起来滴~很明显我的没啥问题
2. 配置一下application.properties
没啥,就一个数据库配置和端口
server.port= 8989
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
3.在pom文件里面加上需要的依赖
这里不只是Swagger和MyBatis-plus的依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<!--添加 代码生成器 依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.1</version>
</dependency>
<!-- freemarker 模板引擎 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
<!--Swagger2相关的依赖 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
4.MyBatis-plus生成代码的类CodeGenerator
package com.clouds.orange.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @Author soul
* Date 2021/7/23
*/
public class CodeGenerator {
/**
* 读取控制台内容
*/
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.isNotEmpty(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
public static void main(String[] args) {
/**
* 代码生成器
*/
AutoGenerator mpg = new AutoGenerator();
/**
* 全局配置
*/
GlobalConfig globalConfig = new GlobalConfig();
//生成文件的输出目录
String projectPath = System.getProperty("user.dir");
globalConfig.setOutputDir(projectPath + "/src/main/java");
//Author设置作者
globalConfig.setAuthor("soul");
//是否覆盖文件
globalConfig.setFileOverride(true);
//生成后打开文件
globalConfig.setOpen(false);
mpg.setGlobalConfig(globalConfig);
/**
* 数据源配置
*/
DataSourceConfig dataSourceConfig = new DataSourceConfig();
// 数据库类型,默认MYSQL
dataSourceConfig.setDbType(DbType.MYSQL);
//自定义数据类型转换
dataSourceConfig.setTypeConvert(new MySqlTypeConvert());
dataSourceConfig.setUrl("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false");
dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("123456");
mpg.setDataSource(dataSourceConfig);
/**
* 包配置
*/
PackageConfig pc = new PackageConfig();
pc.setModuleName(scanner("模块名"));
//父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
pc.setParent("com.clouds.orange");
mpg.setPackageInfo(pc);
/**
* 自定义配置
*/
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
/**
* 模板
*/
//如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
// 如果模板引擎是 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/"+ pc.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
/**
* 配置模板
*/
TemplateConfig templateConfig = new TemplateConfig();
// 配置自定义输出模板
//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
// templateConfig.setEntity("templates/entity2.java");
// templateConfig.setService();
// templateConfig.setController();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
/**
* 策略配置
*/
StrategyConfig strategy = new StrategyConfig();
//设置命名格式
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setInclude(scanner("请输入表名,并用,隔开").split(","));
//实体是否为lombok模型(默认 false)
strategy.setEntityLombokModel(true);
//生成 @RestController 控制器
strategy.setRestControllerStyle(true);
//设置自定义继承的Entity类全称,带包名
//strategy.setSuperEntityClass("com.jiangfeixiang.mpdemo.BaseEntity");
//设置自定义继承的Controller类全称,带包名
//strategy.setSuperControllerClass("com.jiangfeixiang.mpdemo.BaseController");
//设置自定义基础的Entity类,公共字段
strategy.setSuperEntityColumns("id");
//驼峰转连字符
strategy.setControllerMappingHyphenStyle(true);
//表名前缀
strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
配置好数据源运行CodeGenerator中的main方法,按照要求输入表名
生成的项目结构,可以先跑一下。跑不动?
跑不动很正常的,因为在启动类里面少了个玩意儿@MapperScan(“com.clouds.silver.mapper”)
5.丝袜哥的SwaggerConfig
package com.clouds.silver.config;
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.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
.pathMapping("/")
.select()
.apis(RequestHandlerSelectors.basePackage("com.clouds.silver.controller"))
.paths(PathSelectors.any())
.build().apiInfo(new ApiInfoBuilder()
.title("SpringBoot整合Swagger")
.description("SpringBoot整合Swagger,详细信息>>>>>>")
.contact(new Contact("银子","www.silver.com","silver@mial.com"))
.license("The Apache License")
.licenseUrl("https://www.baidu.com")
.build()
);
}
}
跑一下,看看是否丝滑~运行以浏览器输入:http://localhost:8989/swagger-ui.html,端口自己的写自己的。向下面这个界面就成了。
6.加上丝袜哥的注解,写两个接口试试
mapper就自动生成的,想要了解更多关于myBatis-plus的运用可以看官网:https://mp.baomidou.com/
6.1 UserController
在类上加注解:@Api(tags = “用户”)
在方法上加注解:@ApiOperation(“获取全部用户”)
package com.clouds.silver.controller;
import com.clouds.silver.entity.User;
import com.clouds.silver.service.IUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author soul
* @since 2021-07-26
*/
@RestController
@RequestMapping("/silver/user")
@Api(tags = "用户")
public class UserController {
@Resource
private IUserService userService;
@ApiOperation("获取全部用户")
@GetMapping("getUserAll")
public List<User> getUserAll(){
return userService.list();
}
@ApiOperation("根据用户名查询")
@GetMapping("getUserByName")
public List<User> getUserByName(@RequestParam("name") String name){
return userService.getUserByName(name);
}
}
6.2 IUserService和UserServiceImpl
package com.clouds.silver.service;
import com.clouds.silver.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author soul
* @since 2021-07-26
*/
public interface IUserService extends IService<User> {
/**
* 根据用户名查询
* @param name
* @return
*/
List<User> getUserByName(String name);
}
package com.clouds.silver.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.clouds.silver.entity.User;
import com.clouds.silver.mapper.UserMapper;
import com.clouds.silver.service.IUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author soul
* @since 2021-07-26
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@Resource
private UserMapper userMapper;
@Override
public List<User> getUserByName(String name) {
QueryWrapper<User> queryWrapperUser = new QueryWrapper<User>();
queryWrapperUser.like("name",name);
return userMapper.selectList(queryWrapperUser);
}
}
6.3 User实体类
在实体类上加上swagger的注解:@ApiModel
package com.clouds.silver.entity;
import java.time.LocalDateTime;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author soul
* @since 2021-07-26
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel
public class User implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 姓名
*/
private String name;
/**
* 年龄
*/
private Integer age;
/**
* 邮箱
*/
private String email;
/**
* 直属上级id
*/
private Long managerId;
/**
* 创建时间
*/
private LocalDateTime createTime;
}
7.瞅瞅swagger-ui
运行项目,访问http://localhost:8989/swagger-ui.html,看到如下界面,就真的成了
接口可以复制到浏览器试试,我随便测了一下,还是能查询到的
总结
上面的案例到我的资源里面找找