본문 바로가기
반응형

분류 전체보기714

순수 JPA와 Querydsl 순수 JPA 사용하기 순수 JPA를 사용하여 MemberJpaRepository를 구현합니다 @Repository public class MemberJpaRepository { private final EntityManager em; private final JPAQueryFactory queryFactory; public MemberJpaRepository(EntityManager em) { this.em = em; this.queryFactory = new JPAQueryFactory(em); } public void save(Member member) { em.persist(member); } public Optional findById(Long id) { Member findMember = em... 2022. 2. 13.
QueryDsl 수정, 삭제 수정 기본적으로 JPA는 수정, 삭제 시에 1건당 1번의 쿼리문을 날립니다. 연봉 인상같은 전체 적용사항은 한명씩 처리하는 것보다, 한번의 쿼리로 처리하는게 훨씬 효율성이 좋습니다. 이를 벌크 연산이라고 합니다. 수정을 실행해봅니다. 벌크연산은, 모든 member를 영속성 컨텍스트에 올리고 바로 DB에 반영합니다. 그런데, 영속성 컨텍스트에 수정된 값을 반영하지 않기 때문에 영속성 컨텍스트와 DB는 정합성이 맞지 않습니다. //member1 = 10 -> DB member1 //member2 = 20 -> DB member2 //member3 = 30 -> DB member3 //member4 = 40 -> DB member4 long count = queryFactory .update(member) ... 2022. 2. 13.
Querydsl 동적쿼리 동적쿼리 사용 2가지 방법 동적 쿼리 사용을 위해서는 2가지 방법이 있습니다. BooleanBuilder Where 다중 파라미터 사용 BooleanBuilder where절에 BooleanBuilder를 넣는 방식입니다. and 혹은 or을 사용할 수 있습니다. 아래는 username과 age를 동적 쿼리로 조회합니다. where 절의 핵심 코드는 아래와 같습니다. ... .where(builder) ... @Test public void BooleanBuilderQuery() { String usernameParam = "member1"; Integer ageParam = 10; List result = searchMember1(usernameParam, ageParam); Assertions.ass.. 2022. 2. 13.
QueryDsl 프로젝션 문법 프로젝션 프로젝션이란 select 대상 지정을 의미합니다. 대상이 1개인지 복수개인지에 따라 방식이 달라집니다 셀렉션(selection)은 행 단위의 조회입니다 프로젝션(projection)은 열 단위의 조회입니다. 따라서 프로젝션 조회란, 행이 아닌 열을 중심으로 생각해야 합니다. 1. 프로젝션 대상이 하나 단순히 username만 조회하기 때문에 일반 조회처럼 하면 됩니다. List result = queryFactory .select(member.username) .from(member) .fetch(); 2. 튜플 조회 프로젝트 대상이 둘 이상일 때는 튜플 조회를 사용합니다. @Test public void tupleQuery() { List result = queryFactory .select(.. 2022. 2. 13.
TIL_220212 1. Facts(사실, 객관) - Querydsl 세팅 설정 글 - Querydsl 기본문법 글 2. Feelings(느낌, 주관) 이전에 강의로 보았던 Querydsl에 대해서 셋팅설정과 기본문법을 글로 작성했습니다. intellij에서 spring boot를 사용하는 환경이였으며, 기본문법을 어떻게 사용하는지 확인했습니다. Querydsl은 JPA에서 컴파일 수준에서 오류를 알려주고, 직관적인 자바 문법과 자동완성기능이 있어서 쉽게 쿼리를 짤 수 있습니다. 3. Findings (배운 점) 4. Action (구체적 계획) 프로젝트에서 JPQL을 만든 쿼리를 Querydsl로 개선한다. 2022. 2. 13.
QueryDsl 기본문법 QueryDsl 검색 조건 쿼리(From, Where) 검색 조건은 username이 member1, 나이가 10~30살인 사람입니다. select, from은 같은 경우 selectFrom으로 합쳐서 사용할 수 있습니다. where조건은 and로 게속 이어나갈 수 있습니다. @Test public void search() { Member findMember = queryFactory .selectFrom(member) .where(member.username.eq("member1").and(member.age.between(10, 30))) .fetchOne(); Assertions.assertThat(findMember.getUsername()).isEqualTo("member1"); } and 로 .. 2022. 2. 12.
JPA & JPQL & QueryDsl 개요 JPA, JPQL, QueryDsl을 사용하여 조회하는 방법을 비교해봅니다. 조회 방식 코드로 테스트해보기 상황은 Team과 Member가 1:N으로 연관관계를 가지고 있다고 가정합니다. EntityManager를 통해 Team과 Member를 생성합니다. N쪽에 연관관계의 주인이기 때문에 FK를 가집니다. JPA 설정에서 주의 할 것은, @ManyToOne 연관관계에서 fetch를 LAZY로 설정해야 합니다.(default는 EAGER입니다.) JPA 기본 데이터 테스트 순수 JPA로, em.createQuery()를 사용해서 쿼리를 만들 수 있습니다. persist로 영속성 컨텍스트에 넣고, flush로 반영하고, 마지막에는 clear로 영속성 컨텍스트에 담긴 모든 것을 초기화합니다. @Spri.. 2022. 2. 12.
TIL_220211 1. Facts(사실, 객관) - A/S 통계 화면 요구사항 오픈 및 2차 접수 - 부품현황 화면 개선 2. Feelings(느낌, 주관) A/S 통계화면 오픈을 하고 2차 접수를 받았습니다. 오픈 내용은 이전에 요구했던 내용을 모두 충족시켜서 만들었습니다. 또한 추가적으로 요청이 있어서 2차 접수를 받았습니다. 일이 여러가지가 많다보니, 정신없는 상태에서 input이 들어오면 잘 받아들여지지 않습니다. 그래서 재빨리 현업이 어떤 것을 원하는지 체크하여 정리했습니다. 또한 내가 미리 엑셀파일로 db관련 정보들을 넘겨야 했기 때문에 협의가 끝난 즉시 까먹지 않도록 바로 엑셀파일을 보내고 내용들을 폴더별로 정리했습니다. 이전에는 이런 부분들이 부족해서 항상 다시 물어봤어야 했는데 한번에 정리해두기 다음에 일.. 2022. 2. 12.
TIL_220210 1. Facts(사실, 객관) - A/S 화면 요구사항 재정리 및 개발 - 오류코드 수정 배포하기 2. Feelings(느낌, 주관) 3. Findings (배운 점) 어제 분석한 A/S 화면 요구사항들을 다시한번 분석하여 정리하였습니다. 그와중에 궁금했던 내용을 정리해서 다시 현업에게 질의하여 원하는 답변을 이끌었습니다. 물론 현업에서 비지니스를 잘 알기 때문에 잘 따라야하는 것은 당연합니다. 하지만 한편으로, 단순히 수동적으로 일하는게 아니라 어떤 부분이 문제여서 어떤 부분이 추가되어야하는지 이유를 알아야 개발하는 나도 비지니스 이해도가 높아지고 개선의 이유와 더 나은 방법을 찾게 됩니다. 또한 개선을 목적으로 변경을 했을 때, 특정 코드가 변경됨으로써 다른 부분이 영향을 미치지 않는지 확인하는 것도.. 2022. 2. 11.
반응형