본문 바로가기

전체 글102

[Spring Data JPA] 구독하기 구현하기 -4 구독리스트 구현, JPQL 사용한 Native Query ★ 우선 들어가기전에 그동안 사용해왔던 방법인 네이티브 쿼리 방식은 이번에 사용되지않는다. 그러한 이유는 우리가 새로 짠 스칼라쿼리에서 동일 유저인지 판단 쿼리에서 select ~ if ~ if 문의 리턴값은 Repository가 받아들이는 리턴값인 JparRepository 의 subscribe인데 쿼리의 리턴값은 subscribe가 아니여서 네이티브 쿼리를 사용할 수 없다. 그렇기 떄문에 이번에는 service 에서 직접 네이티브쿼리를 짤것이다. JPQL(Java Persistence Query Language) 사용 - 테이블이 아닌 엔티티 객체를 대상으로 검색하는 객체지향 쿼리 - SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음 - JPA는 JPQL을 분석한 후 적절한 SQL을 만들어.. 2023. 1. 11.
[Spring Data JPA] 구독하기 구현하기 - 3 구독정보 모달 구현, Mysql 스칼라 서브쿼리 만들기 1번이 로그인해서 2번의 구독정보를 보고있다고 가정하자, 조건 1. 구독 정보를 클릭 시 2번 유저를 구독한 상황인 다른 유저들이 나와야 한다. 2. 로그인한 1번유저가 만약 제 3자인 3번유저가 구독되어있는 상황이라면 구독취소 버튼이, 아니라면 구독하기 버튼이 나와야한다. 3. 1번유저가 3번유저 구독정보를 눌렀는데 본인인 1번유저도 나오면 안된다. 그렇다면 필요한건 이 여러가지의 데이터를 옮길 DTO와 DB쿼리가 필요하다. profile.jsp 게시물${dto.imageCount} 구독정보${dto.subscribeCount} . . . . . . 구독정보 ssar 구독취소 구독정보를 클릭하면 javascript를 통해 modal이 오픈된다. profile.js function subscribeInf.. 2023. 1. 11.
[Spring Data JPA] 구독하기 구현하기 - 2 Ajax 연결하기 Profile.jsp 사진등록 구독취소 구독하기 이전에 c:choose 했었던 구독버튼 온클릭 이벤트에 ${dto.user.id} , 함수를 바로 불러오는 this를 추가 SusbcribeApiController @RequiredArgsConstructor @RestController public class SubscribeApiController { private final SubscribeService subscribeService; @PostMapping("/api/subscribe/{toUserId}") public ResponseEntity subscribe(@AuthenticationPrincipal PrincipalDetails principalDetails , @PathVariable in.. 2023. 1. 11.
[Spring Data JPA] 로그인 상태에 따라 다른 구독버튼 / 구독하기 - 1-1 @Builder @NoArgsConstructor @AllArgsConstructor @Data public class UserProfileDto { private boolean pageOwnerState; private int imageCount; private boolean subscribeState; private int subscribeCount; private User user; } UserProfileDto 에 subscribeState , subsscribeCount 를 추가한다. public interface SubscribeRepository extends JpaRepository { @Modifying // INSERT , DELETE , UPDATE를 네이티브 쿼리로 작성하려면 해당 .. 2023. 1. 10.
[Spring Data JPA] 구독하기 구현하기 - 1 구독 정보 DB 완성 및 구현 저번에 https://pyogowoon.tistory.com/54 에서 만든 구독하기 네이티브 쿼리를 사용하여 구독하기를 해놓은 상태의 사진이다, 현재 프론트엔드단은 구현하지 않았기 떄문에 변화가 없고 DB에만 저장되는 상황이다. 구독하기를 구현하기 위해선 여러개의 쿼리가 들어가야한다. 최소로 3명이 사용한다고 가정하고 쿼리를 짜야한다. 생각을 해보자. 내가 1번 유저고 2번유저의 화면을 본다고 가정했을 때, 2번 유저가 가진 구독자 수를 구해야 한다. 이렇게 쿼리를 짜면 2번 유저가 가진 구독자의 수를 구할 수 있을것이다. 다음번으로 구독 여부를 확인해야하는데, 내가 1번유저고 2번유저를 구독했는지 확인해야 한다면 이런식의 쿼리를 짜면 알수있다. public interface SubscribeRepos.. 2023. 1. 10.
[Spring Data JPA]게시물 띄우는 로직 만들기 -2 뷰 렌더링 게시물${user.images.size()} 구독정보2 El표현식 사용으로 user.images.size를 해주면 간단하게 총 게시물을 띄울 수 있다. 이제는 타인의 게시물도 볼수있도록 뷰 렌더링을 한다. 내 페이지에서는 구독하기 버튼이 나오지않도록 지정하고, 내가 타인의 페이지로 들어간다고 가정하자, 그렇다면 타인이 올린 사진이 보여야 할것이고, 사진등록 버튼 역시 보이면 안됀다. (구독하기는 아직 미구현) 방법에는 2가지 방법이 있는데 1. JSP EL태그 사용하기 사진등록 구독하기 JSP 의 EL태그를 사용해서 PrincipalDetail 의 로그인정보와, user의 id정보를 통해서 만드는 방법이 있고 2. DTO 사용하기(만들어서 VIEW로 가져옴) UserProfileDto import com.. 2023. 1. 10.
[Spring Data JPA] 무한참조 문제 - @JsonIgnoreProperties @PutMapping("/api/user/{id}") public CMRespDto update( @PathVariable int id, @Valid UserUpdateDto userUpdateDto, BindingResult bindingResult, // 꼭@Valid가 적힌 다음파라메터에 적어야함 @AuthenticationPrincipal PrincipalDetails principalDetails) { if (bindingResult.hasErrors()) { Map errorMap = new HashMap(); for (FieldError error : bindingResult.getFieldErrors()) { errorMap.put(error.getField(), error.getDefau.. 2023. 1. 10.
[Spring Data JPA] 게시판 띄우는 로직 만들기 1-1 무한 참조 오류 * 오류가 뜬 경우 아마 무한 참조 오류가 발생했을것입니다. 발생하지않은 경우 로직 만들기 2 로 가도 무방합니다. public void 사진업로드(ImageUploadDto imageUploadDto, PrincipalDetails principalDetails){ UUID uuid = UUID.randomUUID(); //uuid 하는 이유 = 만약 같은이름의 파일이 uuid 없이 올라온다면 덮어씌워지기 때문에 String imageFileName= uuid+"_"+ imageUploadDto.getFile().getOriginalFilename(); //1.jpg System.out.println("이미지 파일 이름 =" + imageFileName); Path imageFilePath = Path.. 2023. 1. 10.