Spring/Spring 블로그만들기

[Springboot] 나만의 블로그 만들기 - 13. id로 select 테스트

개발자하소서 2022. 3. 21. 18:20
728x90
반응형
SMALL

📌 id 로 select 테스트

 

1. yaml -> ddl-auto 부분을 다시 create로 만들고 실행시켜서 쿼리문을 깨끗하게 만든다.

 

 

 

 

2. postman을 이용해 다시 데이터를 집어놓고 , yaml -> ddl-auto 부분을 다시 update로 바꾼다.

 

 

 

 

 

3. DummycontrollerTest --> .orElseGet(new Supplier<User>() 

package com.cos.blog.test;

import java.util.function.Supplier;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import com.cos.blog.model.RoleType;
import com.cos.blog.model.User;
import com.cos.blog.repository.UserRepository;

@RestController //페이지로 응답할게 아니라 데이터 응답시
public class DummyControllerTest {

	@Autowired // 의존성주입(=DI)
	private UserRepository userRepository;
	
	//{id} 주소로 파라미터를 전달 받을 수 있음
	// http://localhost:8081/blog/dummy/user/3
	@GetMapping("dummy/user/{id}")
	public User detail(@PathVariable int id) {
		//findbyid가 optional인 이유
		// user/4을 찾으면 내가 데이터베이스에서 못찾아오게되면 user가 null값이 될텐데..
		// 그럼 return값으로 null이 리턴이 되자나, 그럼 프로그램에 문제가 있지않겠니?
		//  그래서 optional로 너의 user객체를 감싸서 가져올테니 null인지 아닌지 판단해서 return해 
		User user = userRepository.findById(id).orElseGet(new Supplier<User>() {
				//만약 DB에 해당하는 id값을 select한다면 바로 user로 들어오는데.
			   // 해당하지 않으면 orElseGet으로 들어오면서
			  // User()라는  빈객체를 user에 넣어줄것이다.
			 // 빈객체를 넣어주면 적어도 null은 아니게 된다.
			@Override
			public User get() {
				// TODO Auto-generated method stub
				return new User();
			}
			
		});
		return user;
	}
	
	
	//http://localhost8081/blog/dummy/join(요청) --> request
	//http의 body에 username, password, email데이터를 가지고 요청
	@PostMapping("/dummy/join") // insert 문이니까 post방식
	public String join(User user) { // key=value 약속된규칙
		System.out.println("id :" + user.getId());
		System.out.println("username :" + user.getUsername());
		System.out.println("password :" + user.getPassword());
		System.out.println("email :" + user.getEmail());
		System.out.println("role :" + user.getRole());
		System.out.println("createDate :" + user.getCreateDate());

		user.setRole(RoleType.USER);
		userRepository.save(user);
		return"회원가입이 완료되엇습니다.";
		
	}
}

 

 

4. DummycontrollerTest --> .orElseThrow(new Supplier<IllegalArgumentException>()

 

package com.cos.blog.test;

import java.util.function.Supplier;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import com.cos.blog.model.RoleType;
import com.cos.blog.model.User;
import com.cos.blog.repository.UserRepository;

@RestController //페이지로 응답할게 아니라 데이터 응답시
public class DummyControllerTest {

	@Autowired // 의존성주입(=DI)
	private UserRepository userRepository;
	
	//{id} 주소로 파라미터를 전달 받을 수 있음
	// http://localhost:8081/blog/dummy/user/3
	@GetMapping("dummy/user/{id}")
	public User detail(@PathVariable int id) {
		//findbyid가 optional인 이유
		// user/4을 찾으면 내가 데이터베이스에서 못찾아오게되면 user가 null값이 될텐데..
		// 그럼 return값으로 null이 리턴이 되자나, 그럼 프로그램에 문제가 있지않겠니?
		//  그래서 optional로 너의 user객체를 감싸서 가져올테니 null인지 아닌지 판단해서 return해 
		User user = userRepository.findById(id).orElseThrow(new Supplier<IllegalArgumentException>() {

			@Override
			public IllegalArgumentException get() {
				// TODO Auto-generated method stub
				return new IllegalArgumentException("해당 유저는 없습니다 id : " + id);
			}
			
		});
	
		return user;
	}
	
	
	//http://localhost8081/blog/dummy/join(요청) --> request
	//http의 body에 username, password, email데이터를 가지고 요청
	@PostMapping("/dummy/join") // insert 문이니까 post방식
	public String join(User user) { // key=value 약속된규칙
		System.out.println("id :" + user.getId());
		System.out.println("username :" + user.getUsername());
		System.out.println("password :" + user.getPassword());
		System.out.println("email :" + user.getEmail());
		System.out.println("role :" + user.getRole());
		System.out.println("createDate :" + user.getCreateDate());

		user.setRole(RoleType.USER);
		userRepository.save(user);
		return"회원가입이 완료되엇습니다.";
		
	}
}

 

 

5. http://localhost:8081/blog/dummy/user/3

  ---> 아까 DB에 저장했던 3번의 데이터가 리턴된다.

 

5. http://localhost:8081/blog/dummy/user/4

 ----> DB에는 3번까지 데이터를 삽입하였기에, 4번을 입력하면 해당유저가 없다고 표시된다.

 

 

DummyControllTest

package com.cos.blog.test;

import java.util.function.Supplier;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import com.cos.blog.model.RoleType;
import com.cos.blog.model.User;
import com.cos.blog.repository.UserRepository;


//RestController는 html파일이 아니라, data를 리턴해주는 controller 
@RestController //페이지로 응답할게 아니라 데이터 응답시
public class DummyControllerTest {

	@Autowired // 의존성주입(=DI)
	private UserRepository userRepository;
	
	//{id} 주소로 파라미터를 전달 받을 수 있음
	// http://localhost:8081/blog/dummy/user/3
	// get방식은 postman방식을 이용하지 않아도 가능하다.
	@GetMapping("dummy/user/{id}")
	public User detail(@PathVariable int id) {
		//findbyid가 optional인 이유
		// user/4을 찾으면 내가 데이터베이스에서 못찾아오게되면 user가 null값이 될텐데..
		// 그럼 return값으로 null이 리턴이 되자나, 그럼 프로그램에 문제가 있지않겠니?
		//  그래서 optional로 너의 user객체를 감싸서 가져올테니 null인지 아닌지 판단해서 return해 
		User user = userRepository.findById(id).orElseThrow(new Supplier<IllegalArgumentException>() {

			@Override
			public IllegalArgumentException get() {
				// TODO Auto-generated method stub
				return new IllegalArgumentException("해당 유저는 없습니다 id : " + id);
			}
			
		});
		// 요청 : 웹브라우저
		// user 객체는 = 자바 오브젝트
		// 변환 (웹브라우저가 이해할 수 있는 데이터) --> json 
		// 스프링부트 = MessageConverter라는 애가 응답시 자동으로 작동한다.
		// 만약에 자바 오브젝트를 리턴하게 되면 MessageConveter가 Jackon 라이브러리를 호출해서
		// user 오브젝트를 json으로 변환해서 브라우저에게 던져준다.
		return user;
	}
	
	//람다식으로 표현한다면 좀더 간단하게 표현할 수 있다
	/*
	  User user = userRepository.findById(id).orElseThrow(()->{
	  return new IllegalArgumentException("해당 유저는 없습니다 id : " + id); 
	 });
   return user; 
	 }
	 
	 */
	
	
	//http://localhost8081/blog/dummy/join(요청) --> request
	//http의 body에 username, password, email데이터를 가지고 요청
	@PostMapping("/dummy/join") // insert 문이니까 post방식
	public String join(User user) { // key=value 약속된규칙
		System.out.println("id :" + user.getId());
		System.out.println("username :" + user.getUsername());
		System.out.println("password :" + user.getPassword());
		System.out.println("email :" + user.getEmail());
		System.out.println("role :" + user.getRole());
		System.out.println("createDate :" + user.getCreateDate());

		user.setRole(RoleType.USER);
		userRepository.save(user);
		return"회원가입이 완료되엇습니다.";
		
	}
}
728x90
반응형
LIST