2023.11.27 - [웹/Spring vue 웹 개발] - spring vue swagger 사용 및 controller,serivce 코드 완료
spring vue swagger 사용 및 controller,serivce 코드 완료
2023.11.26 - [웹/Spring vue 웹 개발] - spring vue jpa repository 테스트코드 spring vue jpa repository 테스트코드이전글: 2023.11.25 - [웹/Spring vue 웹 개발] - spring vue entity 변경 spring vue entity 변경 테이블을 이번에 전
kwaksh2319.tistory.com
이번주 이상하게 사적인 일들이 많다보니 공부를 조금 많이 못했습니다.
그래도 swagger에서 테스트 안되던 문제들은 해결했고요. 조만간 다른 컨트롤러들도 전부 변경 예정입니다. 현재는 usersController만 완료되었습니다.
지금 결과도 올바르게 나옵니다.
결과:
추가된 내용 :
commonserivce
package kr.co.kshproject.webDemo.Common;
import org.springframework.stereotype.Service;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
@Service
public class CommonService {
public <T> Long findAllCount(EntityManager entityManager ,CriteriaBuilder cb,Class<T> entityClass) {
CriteriaQuery<Long> countQuery = cb.createQuery(Long.class);
Root<T> root = countQuery.from(entityClass);
countQuery.select(cb.count(root));
return entityManager.createQuery(countQuery).getSingleResult();
}
}
usersRepositoryImpl
package kr.co.kshproject.webDemo.Domain.Users;
import kr.co.kshproject.webDemo.Common.CommonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.Root;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
@Repository
public class UsersCustomRepositoryImpl implements UsersCustomRepository{
@PersistenceContext
private EntityManager entityManager;
private final CommonService commonService;
@Autowired
public UsersCustomRepositoryImpl( CommonService commonService){
this.commonService=commonService;
}
@Override
public Optional<Users> findById(Long id) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
//Notice 사용 이유는 댓글들을 불러오기때문
CriteriaQuery<Users> cq = cb.createQuery(Users.class);
Root<Users> user = cq.from(Users.class);
user.fetch("comments", JoinType.LEFT);
user.fetch("notices", JoinType.LEFT);
user.fetch("baskets", JoinType.LEFT);
user.fetch("orders", JoinType.LEFT);
cq.where(cb.equal(user.get("id"), id));
//cq 쿼리 실행
TypedQuery<Users> query = entityManager.createQuery(cq);
List<Users> result = query.getResultList();
//삼항 연산자 result 비엇을시 empty() 존재지 resutl 리턴
return result.isEmpty() ? Optional.empty(): Optional.of(result.get(0));
}
@Override
public List<UsersDTO> findAllDto() {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<UsersDTO> cq = cb.createQuery(UsersDTO.class);
Root<Users> user = cq.from(Users.class);
cq.select(cb.construct(
UsersDTO.class,
user.get("id"),
user.get("username"),
user.get("email"),
user.get("name"),
user.get("level"),
user.get("password")
));
TypedQuery<UsersDTO> query = entityManager.createQuery(cq);
return query.getResultList();
}
@Override
public Map<String,List> findAll(int page, int size) {
List<Long> totalSize =new LinkedList<>();
Map<String,List> userDTOList=new ConcurrentHashMap<>();
//Criteria API 사용
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
//NoticeDTO <= Notice 커멘트 사용하지 않기 위함
CriteriaQuery<UsersDTO> cq = cb.createQuery(UsersDTO.class);
//from 절
Root<Users> user = cq.from(Users.class);
cq.select(cb.construct(
UsersDTO.class,
user.get("id"),
user.get("username"),
user.get("email"),
user.get("name"),
user.get("level"),
user.get("password")
));
//cq 쿼리 실행
TypedQuery<UsersDTO> query = entityManager.createQuery(cq);
//게시판 총사이즈
Long tSize=commonService.findAllCount(entityManager,cb,Users.class);
tSize=tSize/size+1;
totalSize.add(tSize);
//cq 쿼리 실행 후 페이지 갯수만큼 불러오기
query.setFirstResult( (page-1) *size);
query.setMaxResults(size);
//맵리스트 저장
userDTOList.put("lists",query.getResultList());
userDTOList.put("totalSize",totalSize);
//결과값 리턴
return userDTOList;
}
}
'웹 > Spring vue 웹 개발' 카테고리의 다른 글
RDS 생성 및 EC2 연결 ( h2database -> postgresql rds ) (0) | 2023.12.16 |
---|---|
spring vue swagger 변경작업 완료 (0) | 2023.12.07 |
spring vue swagger 사용 및 controller,serivce 코드 완료 (0) | 2023.11.27 |
spring vue jpa repository 테스트코드 (1) | 2023.11.26 |
spring vue entity 변경 (3) | 2023.11.25 |