第一次寫後臺,跟著大佬學習java後臺開發。第一個任務就是寫user介面,就跟著大佬以前的程式碼,磕磕碰碰開始寫了。
Model層
@Data
@Document(collection = "user")
public class User {
@NotNull
@Id
@Field("user_id")
private String userId = UUID.randomUUID().toString();
@NotNull
@Field("username")
private String username;
@NotNull
@Field("password")
private String password;
@NotNull
private String nickname;
@NotNull
private String role;
private String token;
}複製程式碼
@Data:在類名上方加上了@Data註解, 為類提供讀寫屬性, 此外還提供了 equals()、
hashCode()、toString() 方法,可以簡寫程式碼。
@Document(collection = "xxx"):實體類將會對映到資料庫中的名為xxx的collection。
@Field:用於POST請求,提交單個資料。(這個暫時還不是很懂?)
DAO層
@Repository
public interface UserRepository extends MongoRepository<User, String> {
User findByUsername(String username);
}複製程式碼
@Repository:註解在持久層中,具有將資料庫操作丟擲的原生異常翻譯轉化為spring的持久層異常的功能。
Service層
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User save(User user) throws Exception {
user.setPassword(DigestUtils.sha256Hex(user.getPassword()));
return userRepository.save(user);
}
public User find(String userId) throws Exception {
return userRepository.findById(userId).orElse(null);
}
public Page<User> findAll(Pageable pageable) throws Exception {
return userRepository.findAll(pageable);
}
public void delete(String userId) throws Exception {
User user = userRepository.findById(userId).orElse(null);
if (user == null) {
throw new IllegalArgumentException("No such user");
}
userRepository.delete(user);
}
}複製程式碼
@Service:業務邏輯層註解,這個註解只是標註該類處於業務邏輯層。
Controller層
@RestController
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/user")
public Result saveUser(@RequestBody User user) throws Exception {
return new Result.Builder().setData(userService.save(user)).build();
}
@LoginRequired
@GetMapping("/user/{userId}")
public Result getUser(@PathVariable String userId, @CurrentUser User user) throws Exception {
return new Result.Builder().setData(userService.find(userId)).build();
}
@LoginRequired
@GetMapping("/user/{page}/{size}")
public Result getAll(@PathVariable Integer page, @PathVariable Integer size, @CurrentUser User user) throws Exception{
return new Result.Builder().setData(userService.findAll(PageRequest.of(page-1,size))).build();
}
@LoginRequired
@DeleteMapping("/user/{userId}")
public Result deleteUser(@PathVariable String userId, @CurrentUser User user) throws Exception {
userService.delete(userId);
return new Result.Builder().build();
}
}複製程式碼
@RestController:相當於@Controller+@ResponseBody兩個註解的結合,返回json資料不需要在方法前面加@ResponseBody註解了,但使用@RestController這個註解,就不能返回jsp,html頁面,檢視解析器無法解析jsp,html頁面。
看到大佬寫的@Query還有findBy方法,還有一些註解,emmm打算這兩天再研究一下。