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接??檔??