본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
공부 시작 시각 인증
공부 시작 시각 인증
수강 인증 사진
수강 인증 사진
DB 커넥션 스레드 풀
- 애플리케이션에서 DB로 요청하는 것을 위한 연결 작업은 큰 비용이 들기 때문에 미리 연결 세팅하고 관리하는 방법
- DB가 처리할 수 있는 쓰레드 숫자가 제한되어 있다.
JpaPostRepository.java
package org.fastcampus.post.repository.jpa;
import java.util.List;
import org.fastcampus.post.repository.entity.post.*;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
public interface JpaPostRepository extends JpaRepository<PostEntity, Long> {
@Query("SELECT p.id FROM PostEntity p WHERE p.author.id = :authorId")
List<Long> findAllPostIdByAuthorId(Long authorId);
@Modifying
@Query(value = "UPDATE PostEntity p"
+ " SET p.content = :#{#post.getContent()},"
+ " p.state = :#{#post.getState()},"
+ " p.updDt = now()"
+ " WHERE p.id = :#{#post.id}")
void updatePostEntity(PostEntity post);
@Modifying
@Query(value = "UPDATE PostEntity p"
+ " SET p.likeCount = p.likeCount + :likeCount,"
+ " p.updDt = now()"
+ " WHERE p.id = :postId")
void updatePostLikeCount(Long postId, Integer likeCount);
@Modifying
@Query(value ="UPDATE PostEntity p"
+ " SET p.commentCount = p.commentCount + 1,"
+ " p.updDt = now()"
+ " WHERE p.id = :id")
void increaseCommentCount(Long id);
}
JpaCommentRepository.java
package org.fastcampus.post.repository.jpa;
import org.fastcampus.post.repository.entity.comment.*;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
public interface JpaCommentRepository extends JpaRepository<CommentEntity, Long> {
@Modifying
@Query(value = "UPDATE CommentEntity c "
+ "SET c.content = :#{#comment.getContent()}, "
+ "c.updDt = now() "
+ "WHERE c.id = :#{#comment.getId()}")
void updateCommentEntity(CommentEntity comment);
@Modifying
@Query(value = "UPDATE CommentEntity c "
+ "SET c.likeCount = c.likeCount + :likeCount, "
+ "c.updDt = now() "
+ "WHERE c.id = :commentId")
void updateCommentLikeCount(Long commentId, Integer likeCount);
}
LikeRepositoryImpl.java
package org.fastcampus.post.repository;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.fastcampus.post.application.Interfaces.LikeRepository;
import org.fastcampus.post.domain.Post;
import org.fastcampus.post.domain.comment.*;
import org.fastcampus.post.repository.entity.like.*;
import org.fastcampus.post.repository.jpa.*;
import org.fastcampus.user.domain.User;
import org.springframework.stereotype.Repository;
@Repository
@RequiredArgsConstructor
public class LikeRepositoryImpl implements LikeRepository {
@PersistenceContext
private final EntityManager entityManager;
private final JpaPostRepository jpaPostRepository;
private final JpaCommentRepository jpaCommentRepository;
private final JpaLikeRepository jpaLikeRepository;
@Override
public boolean checkLike(Post post, User user) {
LikeEntity likeEntity = new LikeEntity(post, user);
return jpaLikeRepository.existsById(likeEntity.getId());
}
@Override
@Transactional
public void like(Post post, User user) {
LikeEntity likeEntity = new LikeEntity(post, user);
entityManager.persist(likeEntity);
jpaPostRepository.updatePostLikeCount(post.getId(), 1);
}
@Override
@Transactional
public void unlike(Post post, User user) {
LikeEntity likeEntity = new LikeEntity(post, user);
jpaLikeRepository.deleteById(likeEntity.getId());
jpaPostRepository.updatePostLikeCount(post.getId(), -1);
}
@Override
public boolean checkLike(Comment comment, User user) {
LikeEntity likeEntity = new LikeEntity(comment, user);
return jpaLikeRepository.existsById(likeEntity.getId());
}
@Override
@Transactional
public void like(Comment comment, User user) {
LikeEntity likeEntity = new LikeEntity(comment, user);
entityManager.persist(likeEntity);
jpaCommentRepository.updateCommentLikeCount(comment.getId(), 1);
}
@Override
@Transactional
public void unlike(Comment comment, User user) {
LikeEntity likeEntity = new LikeEntity(comment, user);
jpaLikeRepository.deleteById(likeEntity.getId());
jpaCommentRepository.updateCommentLikeCount(comment.getId(), -1);
}
}
학습 인증샷
학습 인증샷
공부 종료 시각 인증
공부 종료 시각 인증
https://bit.ly/4hTSJNB