블로그 만들기-(3)

Claudia Hong·2021년 11월 25일
0

Project

목록 보기
21/26

1. 더미데이터 INSERT

데이터베이스에 데이터를 Insert(회원가입) 하기 위해서는 Repository 패키지를 만들어야 한다.

패키지 내에 테이블마다의 Repository를 인터페이스로 만들어서 JpaRepository를 extends 한다.
<해당 Repository가 관리하는 테이블, 테이블의 PK 타입>

JpaRepository 내부에는 findAll()이라는 함수를 가지고 있다. findAll은 유저테이블이 가진 모든 행을 리턴하라는 의미.

PagingAndSortingRepository로 가면 정렬해서 찾기, 페이징해서 찾기 함수도 있다.

CrudRepository 에서는 save 함수가 있는데, Insert, Update 등에서 사용 가능함. 다른 함수도 있음 (findById, deleteById 등)

그러므로 UserRepository에서 extends 하고 있기 때문에 그런 기능을 직접 만들지 않아도 된다.

Repository >> DAO(Data Acesss Object) / 자동으로 빈등록(@Repository 생략가능)

@RestController로 DummyControllerTest가 메모리에 뜰 때, @Autowired를 해줘야 userRepository도 같이 메모리에 뜬다.

@Autowired >> 의존성 주입(DI)

@DynamicInsert >> insert할 때 null인 필드를 제외 (role에 null이 들어가지 않고 지정한 Column default 값이 들어가도록 한다) >> But 별로 권장하는 방법은 아님 (어노테이션을 덕지덕지 붙이는 것 NO)

컨트롤러에서 넣고 Repository에 save 한다 >> 권한이 한개만 있을 때는 가능

BUT 권한이 여러개일 때가 훨씬 많고, String으로 직접 입력하면 오류가 발생할 가능성이 크기 때문에 그럴 때는 Enum을 사용한다.

role에 ADMIN과 USER 만 들어가게 강제할 수 있다.

DB에는 RoleType이 없기 때문에 해당 Enum이 String이라고 알려줘야 한다.

실수할 수 있는 것을 방지 >> Enum >> 넣는 값을 강제로 할 수 있음

2. 더미데이터 select

findById는 optional이다. 해당 아이디를 DB에서 못 찾아올 경우 user가 null이 되고 return시 null이 리턴이 되고 프로그램 오류가 발생하므로 optional로 user 객체를 감싸서 가져올 테니 null 여부를 판단해서 return 하도록
findById(id).get() null이 절대 올리 없어

findById(id).orElseGet()면 null일 경우,
(new Supplier < user >) 괄호 안에 들어갈 수 있는게 Supplier 타입이고 이 의미는 익명객체(빈 객체)를 만들어서 넣게 한다는 뜻이다.

선호하는 방법 : findById(id).orElseThrow()
위에서 처럼 null인 경우, IllegerAurgumentException을 사용한다.
(Exception 뜻 : 잘못된 인수가 들어왔다는 뜻. 예를 들면 없는 유저를 넣었다.)
그리고 IllegerAurgumentException을 리턴하면서 메시지를 넣어줄 수 있다.

매번 저렇게 Supplier로 하면 복잡하니 람다식을 쓰면 더 편하긴 하다. (람다식을 상용하면28~33줄까지 생략 가능)

.orElseThrow(()->{
  return new IllegerAurgumentException ("해당 사용자는 없습니다");
});
 return user;

참고)
유저 오브젝트로 리턴을 하는데 웹브라우저는 html이 아닌 RestController가 넘겨주는 데이터를 이해할 수 없다. 그래서 웹브라우저가 이해할 수 있는 json으로 변환해줘야 하는데 이전에는 Gson 라이브러리를 깔아서 변환하게 했다면, Spring Boot는 자바 오브젝트를 리탄하게 될 때 MessageConvertor가 알아서 Jackson 라이브러리를 호출, user 오브젝트를 json으로 변환해 브라우저에 던진다.

3. 페이징 연습

findAll()에서 Pageable을 써서 페이징을 해본다.

아래 내용들을 없애고 유저의 내용만 보고 싶다면,

OR

두번째 방법으로 할 경우, 중간에 if문을 써서 조건식을 더해줄 수 있다.

이렇게 하면 유저의 내용만 리스트에 담아 보여준다

결과는 리스트로 받아서 리턴해주는게 좋다.

0개의 댓글

관련 채용 정보