728x90

Programming 281

Spring - 게시글 수정 / 삭제

- 게시글을 수정 및 삭제하는 방법에 대해 알아 볼 것이다. - 게시글 수정 - PostEdit.java @Getter @Setter @ToString public class PostEdit { @NotBlank(message = "title을 입력해주세요") private String title; @NotBlank(message = "content를 입력해주세요") private String content; @Builder public PostEdit(String title, String content) { this.title = title; this.content = content; } } - PostService.java @Transactional public void edit(Long id, Po..

Programming/Spring 2023.09.05

2023.09.05.TUE

- @Transactional @Transactional 어노테이션을 붙이면 일반적으로 save() 메서드를 호출하지 않아도 변경 내용이 자동으로 DB에 저장될 수 있습니다. @Transactional 어노테이션이 메서드 레벨이나 클래스 레벨에 적용되면 해당 메서드 내에서 일어나는 데이터베이스 관련 작업들은 하나의 트랜잭션으로 묶이게 됩니다. Spring Framework에서 @Transactional 어노테이션을 사용하면 다음과 같은 동작이 발생합니다: 메서드 내에서 데이터베이스 작업이 시작될 때 트랜잭션이 시작됩니다. 메서드 실행 도중 예외가 발생하지 않으면, 메서드가 정상적으로 종료되면서 트랜잭션이 커밋됩니다. 이때 변경 내용이 데이터베이스에 저장됩니다. 메서드 실행 도중 예외가 발생하면 트랜잭션이..

Programming/TMP 2023.09.05

2023.09.04.MON

- @Configuration, @Component - 용도와 역할 1. @Configuration: @Configuration 어노테이션이 지정된 클래스는 스프링의 자바 기반 설정 클래스로 취급됩니다. 이 클래스 내부에는 @Bean 어노테이션을 사용하여 스프링 빈을 정의하고 구성합니다. 스프링 컨테이너에게 빈(Bean)을 생성하고 구성하는 역할을 합니다. 2. @Component: @Component 어노테이션이 지정된 클래스는 스프링의 컴포넌트 스캔의 대상으로 취급됩니다. 컴포넌트 스캔은 지정된 패키지에서 @Component 어노테이션이 지정된 클래스들을 찾아서 자동으로 스프링 빈으로 등록하는 기능을 제공합니다. 주로 비즈니스 로직, 서비스, 컨트롤러 등과 같은 구성 요소를 스프링 빈으로 만들 때 사..

Programming/TMP 2023.09.04

Spring - 페이징 (Jpa, Querydsl)

- 주요 객체 1. Page : 페이지 정보를 담게 되는 인터페이스 2. Pageable : 페이지 처리에 필요한 정보를 담게 되는 인터페이스 - 관계 및 사용 1. PageRequest에 의해 Pageable에 페이징 정보가 담겨 객체화 된다. 2. Pageable이 JpaRepository가 상속된 인터페이스의 메서드에 파라미터로 전달된다. 3. 2번의 메서드의 return으로 Page가 전달 된다. 4. 전달된 Page에 담겨진 Page 정보를 바탕으로 로직을 처리하면 된다. - PageRequest의 메서드 1. of(int page, int size) : 0부터 시작하는 페이지 번호와 개수, 정렬이 지정되지 않은 상태 2. of(int page, int size, Sort sort) : 페이지 ..

Programming/Spring 2023.08.31

Java - 람다 (기본, 함수형 인터페이스 API)

- 람다식을 알아보기 전 람다의 기본이 되는 인터페이스에 대해 다시 한 번 알아보겠다. - 인터페이스 구현 방법 - MyInterface.java public interface MyInterface { public void print(); } - 일반적인 인터페이스 선언 방식이다. 1. implements 키워드로 클래스 선언 - MyClass.java class MyClass1 implements MyInterface { @Override public void print() { System.out.println("MyClass2"); } } class MyClass2 implements MyInterface { @Override public void print() { System.out.println(..

Programming/JAVA 2023.08.31

Spring - 게시글 조회 (다건 조회, 임시 H2 활용한 실제 서비스 확인)

- 게시글 여러개를 조회하기 위한 Controller를 작성 - PostController.java ..... @GetMapping("/posts") public List getList() { return postService.getList(); } } - 기존의 데이터를 가져오는 것이기 때문에 Post가 아닌 Get을 사용하며, 게시글을 여러개 가져올 것이기 때문에 Post 엔티티를 여러개 가여와야 하지만 원하는 조건에 응답을 하기 위해 PostResponse List로 받아온다. - PostService.java ..... public List getList() { return postRepository.findAll().stream() .map(post -> new PostResponse(post)..

Programming/Spring 2023.08.30

Spring - 게시글 조회, 클래스 분리 (단건)

- 게시글 단건 조회 - PostService.java ... public Post get(Long postId) { Post post = postRepository.findById(postId) .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 글입니다.")); return post; } } - Jpa를 통해 postRepository에서 findById를 통해 Id값에 해당하는 Post 엔티티 값을 가져온다. - 기본적으로 값이 없을 경우 null이 반환되기 때문에 Optional로 반환 타입을 지정해야 하지만 참조형을 Post 엔티티로 지정하는 대신 null과 같이 예외가 발생하는 경우 던져버리는 형식으로 바꿔서 사용할 수 있다. * Optiona..

Programming/Spring 2023.08.29

Spring - 클래스 분리, 데이터 저장 (Builder, ObjectMapper, 상황 별Controller 반환 값 등...)

- 데이터 DB에 저장 - 일반적으로 Controller -> (DTO) -> Service -> (DTO) -> Repository -> (Entity, Domain) -> DB 와 같이 클라이언트의 요청이 들어오고 DB에 데이터가 저장되는 흐름이다. - Post.java @Entity @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @Lob private String content; @Builder public Post(String title, S..

Programming/Spring 2023.08.29
728x90