package com.example.demo.domain;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@Entity
public class User {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id // primary key를 지정
Integer id;
// 데이터 정보 선언
@Column (unique = true, nullable = false)
String username;
@Column(nullable = false)
String password;
String name;
String phone;
}
: 기본키 생성을 데이터베이스에게 위임하는 방식으로 id값을 따로 할당하지 않아도 데이터베이스가 자동으로 AUTO_INCREMENT를 하여 기본키를 생성해준다.
package com.example.demo.repository;
import com.example.demo.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
User findByUsername(String username);
}
package com.example.demo.service;
import com.example.demo.domain.User;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public interface UserService {
Map<String, Object> create(Map<String, Object> params);
User update(Map<String, Object> params);
List<User> list();
User detail(Integer id);
User delete(Integer id);
}
package com.example.demo.service.impl;
import com.example.demo.domain.User;
import com.example.demo.repository.UserRepository;
import com.example.demo.service.UserService;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
public UserServiceImpl(UserRepository userRepository){
this.userRepository = userRepository;
}
@Override
public Map<String, Object> create(Map<String, Object> params) {
User user = null;
String username1 = (String) params.get("username");
user = userRepository.findByUsername(username1);
Map<String, Object> result = new HashMap<String, Object>();
if(user == null){
user = new User();
user.setUsername(params.get("username").toString());
user.setPassword(params.get("password").toString());
user.setName(params.get("name").toString());
user.setPhone(params.get("phone").toString());
user = userRepository.save(user);
result.put("id", user.getId());
} else {
result.put("id duplicated", user.getId());
}
return result;
}
@Override
public User update(Map<String, Object> params) {
User user = userRepository.findById(Integer.parseInt(params.get("id") + "")).orElseThrow(
() -> new RuntimeException("")
);
if(params.get("username") != null){
user.setUsername(params.get("username").toString());
}
if (params.get("password") != null){
user.setPassword(params.get("password").toString());
}
if (params.get("password") != null) {
user.setName(params.get("name").toString());
}
if (params.get("phone") != null){
user.setPhone(params.get("phone").toString());
}
userRepository.save(user);
return null;
}
@Override
public List<User> list() {
return userRepository.findAll();
}
@Override
public User detail(Integer id) {
return userRepository.findById(id).orElse(null);
}
@Override
public User delete(Integer id) {
User user = userRepository.findById(id).orElseThrow(
() -> new RuntimeException("")
);
userRepository.delete(user);
return null;
}
}
@Override
public Map<String, Object> create(Map<String, Object> params) {
User user = null;
String username1 = (String) params.get("username");
user = userRepository.findByUsername(username1);
Map<String, Object> result = new HashMap<String, Object>();
if(user == null){
user = new User();
user.setUsername(params.get("username").toString());
user.setPassword(params.get("password").toString());
user.setName(params.get("name").toString());
user.setPhone(params.get("phone").toString());
user = userRepository.save(user);
result.put("id", user.getId());
} else {
result.put("id duplicated", user.getId());
}
return result;
}
package com.example.demo.controller.page;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping("/user")
@Controller
public class UserController {
@GetMapping("/{page}")
public String page(@PathVariable String page){
return "user/" + page;
}
@GetMapping("/{page}/{id}")
public String page2(@PathVariable String page, @PathVariable String id){
return "user/" + page;
}
}
/user
이후의 매핑의 경로로 페이지 이동을 담당한다.package com.example.demo.controller;
import com.example.demo.domain.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@RequestMapping("/api/user")
@RestController
public class UserRestController {
private final UserService userService;
public UserRestController(UserService userService){
this.userService = userService;
}
List<Map<String, Object>> boardList = new ArrayList<>(); // 입력 데이터를 저장하는 List
@GetMapping({"/create"})
public Map<String, Object> create(@RequestParam Map<String, Object> params) {
return userService.create(params);
}
@GetMapping({"/list"})
public List<User> list() {
return userService.list();
}
@GetMapping({"/detail"})
public User detail(@RequestParam Integer id) {
return userService.detail(id);
}
@GetMapping({"/update"})
public User update(@RequestParam Map<String, Object> params) {
return userService.update(params);
}
@GetMapping({"/delete"})
public User delete(@RequestParam Map<String, Object> params) {
return userService.delete(Integer.parseInt(params.get("id") + ""));
}
}