Spring boot 整合swagger和mybatis-plus
1. 回顾
springboot整合数据源:---默认数据源 和 Druid数据源
springboot整合mybatis
springboot整合定时器。
2.正文
1. springboot整合swagger接口文档
2. springboot整合mp
3.springboot整合swagger接口文档
开发流程:
接口文档的作用: 就是为了方便前后端的交互。
需要在线接口文档: --swagger2
(1)如何使用swagger2
<!--引入swagger2依赖-->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.1.RELEASE</version>
</dependency>
<!--图形化依赖-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
(2)创建一个swagger配置类
package com.zjw.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.VendorExtension;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import java.util.ArrayList;
@Configuration
public class SwaggerConfig {
@Bean //把该方法返回的对象交于spring容器管理---Docket
public Docket docket(){
// Docket docket=new Docket(DocumentationType.SWAGGER_2);
// docket.apiInfo(getInfo());//设置文档的信息
// //指定未哪些包生成接口文档。
// docket = docket.select().apis(RequestHandlerSelectors.basePackage("com.zjw.controller")).build();
//
// return docket;
Docket docket=new Docket(DocumentationType.SWAGGER_2)
.apiInfo(getInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.zjw.controller"))
.build();
return docket;
}
private ApiInfo getInfo(){
Contact DEFAULT_CONTACT = new Contact("aaa", "http://www.zjw.com", "zjw@qq.com");
ApiInfo info = new ApiInfo("aaa", "员工管理系统API", "v1.0", "http://www.jd.com",
DEFAULT_CONTACT, "Apache 2.0", "http://www.baidu.com", new ArrayList<VendorExtension>());
return info;
}
}
(3)开启swagger2的注解驱动
(4)测试:
http://localhost:8888/doc.html
从文档中我们发现接口文档的名称--是英文
需要使用swagger的注解
@Api:接口类的说明 加在controller类上
@ApiOperation: 接口方法的说明。 加在controller方法上
@ApiImplicitParams: 接口方法的所有参数的说明.
@ApiImplicitParam:单个参数的说明
--name: 参数名
--value: 参数的说明
--require: 是否为必须的
--dataType: 参数类型说明 int string
@ApiModel: 实体类的说明
@ApiModelProperty: 单个参数的说明
把昨天写的crud----添加的方法使用swagger加以说明
4. springboot整合mp
mp: mybatis-plus
https://baomidou.com/pages/24112f/
(1)依赖
<dependencies>
<!--mp的依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
(2)application.properties
#修改端口号
server.port=80
#数据源
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.url=jdbc:mysql://localhost:3306/zjw?serverTimezone=Asia/Shanghai
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=10
#mybatis映射文件的路径
mybatis.mapper-locations=classpath:/mapper/*.xml
#sql日志--控制台
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
(3)实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
}
(4)dao
public interface UserDao extends BaseMapper<User> {
}
(5) 扫描dao接口
@SpringBootApplication
@MapperScan(basePackages = "com.zjw.dao")
public class Qy168Springboot05Application {
public static void main(String[] args) {
SpringApplication.run(Qy168Springboot05Application.class, args);
}
}
(6)测试
package com.zjw;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zjw.dao.UserDao;
import com.zjw.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.sql.Wrapper;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest
class Springboot05ApplicationTests {
@Autowired
private UserDao userDao;
//测试根据id查询用户信息.
/*
表名和实体类名不一致: 使用@TableName(value="表名")
列名和实体类名不一致: 使用@TableField(value="列名")
主键和实体的不一致| 不叫id 使用@TableId(value="主键列")
如果实体类中出现某个属性 不属于表里面的字段。 @TableField(exist = false) //数据库不存在该列
*/
@Test
void testSelectById() {
User user = userDao.selectById(1); //默认主键名叫id--需要在该属性上标记它为主键。
System.out.println(user);
}
/*
mp:(1)添加时完成主键生成策略.(2)把生成的主键返回给实体类。
思考: 能否修改主键的生成策略。默认生成的主键按照雪花算法。--生成的id全国唯一。Long类型
@TableId(value ="uid",type = IdType.AUTO ) //如果你使用AUTO类,表示它就会采用mysql表的递增策略
默认为ASSIGN_ID
*/
@Test
void testInsert(){
User user=new User(null,"zjw~22",152,"120@qq.com");
System.out.println("添加前:"+user);
userDao.insert(user);
System.out.println("添加后:"+user);
}
@Test
public void testUpdate(){
User user=new User(1L,"zjw",1,"130@qq.com");
// userDao.updateById(user); //根据主键修改.
//mp封装了一个条件类 每个条件对应一个方法:Wrapper---UpdateWrapper[增删改的条件] QueryWrapper[查询的条件]
UpdateWrapper<User> wrapper=new UpdateWrapper<>();
// wrapper.eq("name","zjw"); //where name='zjw'
// wrapper.ge("age",18); // where age>=18
// wrapper.between("age",15,25);// where age between 15 and 25;
// wrapper.like("name","zjw");//where name like '%zjw%'
// wrapper.ne("name","zjw"); //where name !='zjw'
// wrapper.lt("age",25); //where age<25;
// wrapper.notLike("name","z");
// wrapper.or();//or
// wrapper.ne("name","zjw"); //where name like '%z%' and name<>'zjw'
userDao.update(user,wrapper);
}
//测试删除
@Test
public void testDelete(){
//根据主键删除
//int row = userDao.deleteById(1);
//deleteBatchIds: 批量删除
// List<Long> ids=new ArrayList<>();
// ids.add(1L);
// ids.add(3L);
// ids.add(9L);
// userDao.deleteBatchIds(ids); //where id in(1,3,9)
//根据其他条件删除--
UpdateWrapper<User> wrapper=new UpdateWrapper<>();
wrapper.likeRight("name","刘");
userDao.delete(wrapper);
}
//根据条件多条记录
@Test
public void testSelectAll(){
QueryWrapper<User> wrapper=new QueryWrapper<>();
wrapper.like("name","王");
List<User> users = userDao.selectList(wrapper);
System.out.println(users);
}
//分页查询. 如果想让分页有效 必须配置分页拦截器。
/*
*/
@Test
public void testSelectByPage(){
IPage<User> iPage=new Page(1,2);
QueryWrapper<User> wrapper=new QueryWrapper<>();
wrapper.orderByDesc("uid");
IPage<User> page = userDao.selectPage(iPage, wrapper);//Page:分页对象 Wrapper:条件对象
System.out.println("总条数:"+page.getTotal());
System.out.println("总页数:"+page.getPages());
System.out.println("当前页的记录:"+page.getRecords());
}
}