1.初始Swagger
swagger的由来
- 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染、先后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远。
- 前端和后端的唯一联系,变成了API接口;API文档变成了前后端开发人员联系的纽带,变得越来越重要,swagger就是一款让你更好的书写API文档的框架。
添加依赖
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.8.0.RELEASE</version>
</dependency>
2.Spring Data JPA进阶练习
1.持久化类
package com.example.springdatajpa.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;
@Entity
@Data
public class SysUser implements Serializable {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String account;
@Column(nullable = false)
private String password;
private String nickname;
private Integer fans;
public SysUser(String account, String password, String nickname,
Integer fans) {
this.account = account;
this.password = password;
this.nickname = nickname;
this.fans = fans;
}
public SysUser() {
}
}
2.repository接口
package com.example.springdatajpa.dao;
import com.example.springdatajpa.entity.SysUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
* 继承JpaRepository,默认已经具备创建(save)、更新(save)、删除(delete)、查
询(findAll、findOne)等基本功能
*/
public interface UserRepository extends JpaRepository<SysUser, Long> {
//根据账号精确查询用户,采用的是通过解析方法名创建查询
SysUser findByAccount(String account);
//根据昵称关键词查询用户,采用的是通过解析方法名创建查询
List<SysUser> findByNicknameLike(String keywords);
//查询昵称含有指定关键词并且按粉丝数降序排列,采用自定义的JPQL查询
@Query("from SysUser u where u.nickname like
CONCAT('%',:nickname,'%') order by u.fans desc ")
List<SysUser> findUsers(@Param("nickname") String nickname); 23
}
3.单元测试
package com.example.springdatajpa.dao;
import com.example.springdatajpa.entity.SysUser;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTest {
@Resource
private UserRepository userRepository;
@Test
public void initData() {
// 创建6条用户记录
SysUser[] users = {
new SysUser("aaa@qq.com", "111", "简书大学堂", 1129),
new SysUser("bbb@qq.com", "222", "宇文欢", 897),
new SysUser("ccc@qq.com", "333", "一只枝", 776),
new SysUser("ddd@qq.com", "444", "lostdays", 666),
new SysUser("eee@qq.com", "555", "十七楼的安素", 433),
new SysUser("fff@qq.com", "666", "徐林Grace", 112)
};
for (int i = 0; i < 6; i++) {
userRepository.save(users[i]);
}
}
@Test
public void findAll() {
List<SysUser> users = userRepository.findAll();
users.forEach(sysUser -> System.out.println(sysUser));
}
@Test
public void findOne() {
SysUser user = userRepository.findById(21L).get();
System.out.println(user);
}
@Test
public void findByAccount() {
SysUser sysUser = userRepository.findByAccount("aaa@qq.com");
System.out.println(sysUser);
}
@Test
public void findByNicknameLike() {
List<SysUser> users = userRepository.findByNicknameLike("%@qq%");
users.forEach(user -> System.out.println(user));
}
@Test
public void findUsers() {
List<SysUser> users = userRepository.findUsers("简");
users.forEach(sysUser -> System.out.println(sysUser));
}
}
4.service层
package com.example.springdatajpa.service;
import com.example.springdatajpa.entity.SysUser;
import java.util.List;
public interface UserService {
//查询所有用户
List<SysUser> getAll();
//根据id查询用户
SysUser getUser(Long id);
//根据账号精确查询用户
SysUser getUserByAccount(String account);
//根据昵称关键词查询用户
List<SysUser> getUsersByNicknameLike(String keywords);
//查询昵称含有指定关键词并且按粉丝数降序排列
List<SysUser> getUsersOrderByFans(String nickname);
}
实现类
package com.example.springdatajpa.service.impl;
import com.example.springdatajpa.dao.UserRepository;
import com.example.springdatajpa.entity.SysUser;
import com.example.springdatajpa.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserRepository userRepository;
@Override
public List<SysUser> getAll() {
return userRepository.findAll();
}
@Override
public SysUser getUser(Long id) {
return userRepository.findById(id).get();
}
@Override
public SysUser getUserByAccount(String account) {
return userRepository.findByAccount(account);
}
@Override
public List<SysUser> getUsersByNicknameLike(String keywords) {
return userRepository.findByNicknameLike(keywords);
}
@Override
public List<SysUser> getUsersOrderByFans(String nickname) {
return userRepository.findUsers(nickname);
}
}
5.controller层
package com.example.springdatajpa.controller;
import com.example.springdatajpa.entity.SysUser;
import com.example.springdatajpa.service.UserService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping(value = "/user")
public class UserController {
@Resource
private UserService userService;
/**
* 映射 /user/all请求,获取所有用户数据
* @return
*/
@GetMapping("/all")
public List<SysUser> getAll() {
return userService.getAll();
}
/**
* 映射 /user/{id}请求,获取指定id的用户数据 ,具体的id值可以直接放在地址url
里传递
* @return
*/
@GetMapping("/{id}")
public SysUser getUser(@PathVariable Long id) {
return userService.getUser(id);
}
/**
* 映射 /user/account请求,获取指定账户的用户数据,需要传递一个用户账号参数
* @return
*/
@GetMapping("/account")
public SysUser getUserByAccount(@RequestParam String account) {
return userService.getUserByAccount(account);
}
/**
* 映射 /user/nickname请求,获取根据昵称关键词查询的用户数据,需要传递一个昵
称关键词作为参数,且因为是第二种方法,参数需要:%简书%的形式
* @return
*/
@GetMapping("/nickname")
public List<SysUser> getUsersByNicknameLike(@RequestParam String
keywords) {
return userService.getUsersByNicknameLike(keywords);
}
/**
* 映射 /user/order请求,获取根据昵称关键词查询并按粉丝数降序排列的用户数据,
需要传递一个昵称关键词作为参数,自己写的查询,参数只需要传递字符串
* @return
*/
@GetMapping("/order")
public List<SysUser> getUsersOrderByFans(@RequestParam String
nickname) {
return userService.getUsersOrderByFans(nickname);
}
}
6. swagger接⼝⽂档⻚⾯
网友评论