1、分页的方法。
如果我们想要在页面上进行分页,我在之前用纯java和js写过,十分的麻烦,那么我们现在有没有一种简单的分页方法呢?答案是有的
官网地址:
https://github.com/pagehelper/pagehelper-spring-boot https://github.com/abel533/MyBatis-Spring-Boot
https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/en/HowToUse.md
,这里我们使用别人已经整合好的代码,进行直接调用。
1、添加pageHelper依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
2、在application.yml添加分页配置信息
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
3、在java代码中调用分页
PageHelper.startPage 静态方法调用
//获取第1页,10条内容,默认查询总数count
Page page = PageHelper.startPage(1, 10);//紧跟着的第一个select方法会被分页
List<User> list = userMapper.selectList();
// 获取总记录数:
page.getTotal();
// 当前页:pageNum,每页大小:pageSize
// 获取总页数:
page.getPages();
2、查询的方法。
1、添加commons常用包依赖
<!-- commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
此时我们在实现类中的代码应该是
@Override
public PageResponseDto<ShoppingStorage> querySelective(String key, String name, Integer page, Integer limit, String sort, String order) {
ShoppingStorageExample example = new ShoppingStorageExample();
ShoppingStorageExample.Criteria criteria = example.createCriteria();
//模糊查询
//搜索的key不为空,并且不等于空字符串。
if(key != null && "".equals(key.trim())){//equals(key.trim())这个括号里面的trim()的意思是去除前后空格
criteria.andKeyEqualTo(key);
}
//分页
Page<ShoppingStorage> mypage = PageHelper.startPage(page,limit);
List<ShoppingStorage> shoppingStorages = shoppingStorageMapper.selectByExample(example);
PageResponseDto pageDto = new PageResponseDto(mypage,shoppingStorages);
return pageDto;
}
2、在java中调用查询方法。
我们看到,在模糊查询的时候,我们编写的条件过于繁琐,此时可以通过常用类中StringUtils.isNotBlank(Key)来进行简化代码。
if (StringUtils.isNotBlank(key)) { // isNotEmpty()
// criteria.andKeyTo(key.trim());精确查询
criteria.andKeyLike("%" + key.trim() + "%");//模糊查询,需要加百分号
}
//搜索的key不为空,并且不等于空字符串。
/*if (key != null && "".equals(key.trim())) {//equals(key.trim())这个括号里面的trim()的意思是去除前后空格
criteria.andKeyEqualTo(key.trim());
}*/
3、排序
1、在java中调用排序方法
在我们使用IDEA生成的Example文件中,如果你数据库中有排序的字段,那么他就会生成orderByClause,排序字段。
// 排序功能
example.setOrderByClause(sort + " " + order);
//sort排序字段,order顺序
4、Spring整合Swagger
现在的项目都是前后端分离的,那么前后端分离之后,接口是否能够正确对接上呢,如果前后端的接口需要进行动态调整,又该如何修改呢,此时Swagger就可以减轻我们的工作量,
1、加入依赖
<!-- swagger -->
<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>
2、Swagger2 配置
Swagger2的配置也是比较容易的,在项目创建成功之后,只需要开发者自己提供一个Docket 的Bean即可,代码如下:
package com.neu.shopping.common.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.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("/")
//选择API
.select()
//映射的控制器
.apis(RequestHandlerSelectors.basePackage("com.neu.shopping.controller"))
.paths(PathSelectors.any())
//创建API信息
.build().apiInfo(new ApiInfoBuilder()
.title("商城后端项目-v1.0的Swagger接口文档")//标题
.description("SpringBoot v2.5.6整合Swagger......")//描述
.version("1.0")//环境
.contact(new Contact("HHHHH", "www.baidu.com", "hujian088@gmail.com"))//联系人
.license(" ")
.licenseUrl(" ")
.build());
}
此时我们在11月17日的对象储存MobileStorageController中添加一行@Api(“对象存储相关接口”)注解
@RestController
@RequestMapping("/mobile/storage")
@Api("对象存储相关接口")
public class MobileStorageController {
之后访问http://localhost:8888/swagger-ui.html,就可看到
这里的就是我们刚刚代码中配置的信息,和我们之前项目写的控制器代码。
我们现在就可通过这个网页来进行接口的调试,看这个接口需要什么参数。
如果加上@ApiIgnore注解,就是不让你看这个接口。
@ApiIgnore 注解主要作用在方法上,类上,参数上。
当作用在方法上时,方法将被忽略;作用在类上时,整个类都会被忽略;作用在参数上时,单个具体的参数会被忽略。
// 真个类被 Swagger 忽略
@ApiIgnore
@RestController
@RequestMapping(value = "/222")
public class XController {
}
@RestController
@RequestMapping(value = "/222")
public class XController {
// 整个方法被忽略
@ApiIgnore
public String hello(){
return "hello";
}
// Swagger 上 忽略 User 参数
public String sayHello(@ApiIgnore User user){
return "hello " + user.getName();
}
}