본문 바로가기

분류 전체보기

(268)
56 : 복수의 트랜잭션으로 Comment 처리 (Springboot + JPA) 다중 트랜잭션 (복수 트랜잭션) (하나의 API에 콜 할 때) DB에 (Insert, Update, Delete) 시키는 로직을 여러번 수행해야 할 때 예를들어 댓글을 구현할 때 다음과 같은 두 가지 sql 문을 실행해야한다 첫 번째로 댓글 입력하는 insert와 두 번째로 board의 댓글 수를 +1 하여 update 하는 작업 만약 insert는 성공했는데 update에 실패했다고 생각해보자. 분명 sql에는 데이터는 추가되었는데 board의 commentCount는 그대로이다. 이렇게 되면 데이터의 무결성이 파괴된다 -> 서비스에 신뢰가 떨어진다 이럴때 복수 트랜잭션을 사용하여 insert, update 둘중 하나라도 실패하면 -> 전체 실패처리 이를 @Transactional 의 성질 중 하나인 ..
10월 5주차 1. Optional 내용 추가 54 : [Java] Optional 이란? (추가예정) 1. Optional이란? Optional 클래스를 사용해 NPE를 방지할 수 있도록 도와준다. Optional 는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다. 클래스이기 때 dwc04112.tistory.com 2. 페이징 처리 설명 추가 55 : JPA+Pageable 페이징처리 (SpringbootApi) 26- 게시판 만들기4 (페이징 처리) 추가한 기능 페이징처리와, EndUser에게 입력받은 '숫자'에 맞추어 글을 출력 동작순서 1. BoardList.jsp에서 EndUser에게 입력받아 Controller를 통해 BoardLIstCmd로 값..
55 : JPA+Pageable 페이징처리 (Springboot + JPA) 26- 게시판 만들기4 (페이징 처리) 추가한 기능 페이징처리와, EndUser에게 입력받은 '숫자'에 맞추어 글을 출력 동작순서 1. BoardList.jsp에서 EndUser에게 입력받아 Controller를 통해 BoardLIstCmd로 값을 넘겨준다 (action) 2. BoardListCmd에.. dwc04112.tistory.com 우선 JSP에서 MVC패턴으로 구현한 페이징처리를 보면 너무 복잡하다. Spring Boot JPA 에서 페이징 처리를 하려면 어떻게 해야할까? 지난시간 까지 만들었던 SpringbootApi에서 구현했다. 저번에 만든 BoardRepository를 수정하여 JpaRepository를 상속받게 BoardRepository를 생성하자 위 다이어그램에서와 같이 생성한 ..
54 : [Java] Optional 이란? (추가예정) 1. Optional이란? Optional 클래스를 사용해 NPE를 방지할 수 있도록 도와준다. Optional는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다. 클래스이기 때문에 각종 메소드를 제공해준다 null인지 아닌지 체크하는 분기문이 없어서 가독성이 좋다 명시적으로 해당 변수가 null일 수도 있다는 가능성을 표현할 수 있다 NPE : 많이 발생되는 예외 중 하나 NullPointerException 메서드가 반환할 결과값이 ‘없음’을 명백하게 표현할 필요가 있고, null을 반환하면 에러를 유발할 가능성이 높은 상황에서 메서드의 반환 타입으로 Optional을 사용하자는 것이 Optional을 만든 주된 목적이다 1. isPresen..
53 : JPA로 삭제와 리스트 출력 review (Springboot + JPA) JPA로 쿼리작성 1 (삭제&리스트출력) 51 : JPA로 쿼리작성 (SpringbootApi) MyBatis - mapper로 쿼리를 가지고 오는 방법 말고 jap를 사용하여 쿼리를 실행해보자. 이전까지 만들어왔던 SpringbootApi에 작성한다. BoardJpa boardjap 디렉토리 안에 bo.. dwc04112.tistory.com 위 글은 내가 작성한 코드 리스트 출력 (isDel = "N" 값만 출력) // Service public List getBoardList() { return boardRepository.findBoardsByIsDel("N"); } // Repository @Repository public interface BoardRepository extends CrudRe..
JPA로 쿼리작성 1 (삭제&리스트출력) 51 : JPA로 쿼리작성 (SpringbootApi) MyBatis - mapper로 쿼리를 가지고 오는 방법 말고 jap를 사용하여 쿼리를 실행해보자. 이전까지 만들어왔던 SpringbootApi에 작성한다. BoardJpa boardjap 디렉토리 안에 board디렉토리 처럼 controller , model.. dwc04112.tistory.com 위 코드에서 다음과 같은 기능을 추가했습니다 Delete DELETE /boardjpa/{id} 구현 DB에 데이터를 DELETE 시키지 말고, board 컬럼 중 isDel 을 "Y"로 업데이트 저번에 작성한 Board부분 코드와 매우 유사하다. BoardJpaService public ApiResponse updateIsDelBoard(int id,..
52 : @Entity, @Builder, @GeneratedValue @Entity @Entity가 붙은 클래스는 JPA가 관리하는 클래스로, 해당 클래스를 엔티티라고 한다 JPA를 사용해서 테이블과 매핑할 클래스는 반드시 @Entity 를 붙여야 한다 [주의사항] 기본 생성자 필수이다. 파라미터가 없는 public 또는 protected 생성자가 필요하다. final 클래스, enum, interface, inner 클래스는 엔티티로 사용할 수 없다. DB에 저장하고 싶은 필드에는 final을 사용할 수 없다. (출처 : https://gmlwjd9405.github.io/2019/08/11/entity-mapping.html) @Table @Table은 엔티티와 매핑할 테이블을 지정하는 것이다. @Table 속성 @Table(name = "Board") 매핑할 테이블 ..
51 : JPA로 CRUD 기능 구현 (SpringbootApi) MyBatis - mapper로 쿼리를 가지고 오는 방법 말고 jap를 사용하여 쿼리를 실행해보자. 이전까지 만들어왔던 SpringbootApi에 작성한다. BoardJpa boardjap 디렉토리 안에 board디렉토리 처럼 controller , model , service 구조로 디렉토리를 생성한다. 그리고 아래와 같이 파일을 생성해보자 controller.BoardJapController service.BoardJpaService dto.BoardDTO model.Board model.BoardRepository (인터페이스) model.Board [중요] JPA로 데이터를 가져오려면 (테이블과 매핑하려면) 테이블 정의한 객체 Board를 생성하고 @ Entity 어노테이션을 사용해야한다 (아래는..