25%
66,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! Querydsl
MyBatis vs JPA vs JPA + querydsl 질문이 있습니다.
JPA(ORM) 장점 1) RDB에 종류와 관계없이 사용 가능하다. 추후 DB 변경이나 코드 재활용에 용이하다. 2) 비지니스 로직에 집중할 수 있다. 3) 테이블 생성, 변경 등 엔티티 관리가 간편하다. 4) 쿼리에 집중할 필요 없어 빠른 개발이 가능하다. 단점 1) 어렵다. 단방향, 양방향, 임베디드 관계 등 이해해야할 내용이 많으며, MyBatis(SQL Mapper) 장점 1) JPA에 비해 쉽다. SQL 쿼리를 그대로 사용하기에 복잡한 Join, 튜닝 등을 좀더 수월하게 작성 가능하다. 2) SQL의 세부적인 내용 변경 시 좀 더 간편하다. 3) 동적 쿼리 사용 시 JPA보다 간편하게 구현 가능하다. 단점 1) 데이터 베이스 설정 변경 시 수정할 부분이 너무 많다. (Oracle의 페이징 쿼리를 MySQL에서 사용 불가능!) 2) Mapper작성부터 인터페이스 설계까지 JPA보다 많은 설계와 파일, 로직이 필요하다. 3) 특정 DB에 종속적이다. Querydsl 장점 1) 쿼리를 자바 코드로 작성 2) 문법 오류를 컴파일 시점에 잡을 수 있음. 3) 쉬운 SQL 스타일 문법(복잡한 쿼리 작성 용이) 질문 : Querydsl 초반부만 듣고 있는 수강생입니다. 1) 서비스가 MVC + MYBatis에서 JPA + querydsl 바꾸는 점에 있어 생기는 기본적인 문제들이 있을까요? 2) QueryDSL이 MyBatis를 대신해 커버 가능할까요?
- 미해결실전! Querydsl
querydsl 스프링부트에 적용시 질문이 있습니다
빌드된 파일이 있을 경우엔 상관이 없지만 ./gradlew clean 을 돌려서 빌드파일을 모두 삭제하고나서 어플리케이션을 실행하면 QMember 를 찾을 수 없어서 실행이 되지 않습니다. 저는 클린했다가 어플리케이션 run만 돌려도 실행이 가능해야 한다고 생각합니다. 그냥 빌드돌리고 run 하도록 하는게 맞을까요?
- 미해결실전! Querydsl
fetchCount @Deprecated
안녕하세요 영한님 2:10분 쯤 @Deprecated 이 되었는데 이렇게 쓰면 될까요 ??
- 해결됨실전! Querydsl
select()가 아닌 selectOne()을 사용하면 fetchJoin을 사용하지 못하나요?
안녕하세요. 강의 잘 듣고 있습니다 :) exists 기능을 구현하고 있는데, fetchJoin을 사용해봤습니다. 그저 데이터의 유무만 판단하면 됐기에 selectOne() 으로 조회를 했는데 실패하네요 ㅠㅠ 하지만 이후 fetchJoin()을 제거하니 잘 동작하는 모습을 확인했습니다. // 성공하는 코드 @Override public boolean existsByReviewEntity(ReviewEntity reviewCond) { final Integer result = queryFactory .selectOne() .from(reviewCommentEntity) .innerJoin(reviewCommentEntity.reviewEntity, reviewEntity) .where(reviewEq(reviewCond)) .fetchFirst(); return result != null; } // 실패하는 코드 @Override public boolean existsByReviewEntity(ReviewEntity reviewCond) { final Integer result = queryFactory .selectOne() .from(reviewCommentEntity) .innerJoin(reviewCommentEntity.reviewEntity, reviewEntity).fetchJoin() .where(reviewEq(reviewCond)) .fetchFirst(); return result != null; } 제 생각에는 두 가지 이유가 추측되는데요, 1. selectOne 이랑 fetchJoin의 실행 순서(?) 2. select 1 을 하면 특정 필드를 가져오는 것이 아니기 때문에 fetchJoin이 불가능(?) 열심히 구글을 찾아봐도 만족스러운 답을 찾지 못했고, 두루뭉실하게 의문만 남아있는 상태네요.. 도움 주시면 감사하겠습니다 !! 짤막한 힌트도 좋습니다 :)
- 미해결실전! Querydsl
querydsl 동적 쿼리 질문
안녕하세요 영한님! 강의는 잘 듣고 있습니다. 강의를 듣다가 궁금한 점이 어디까지 동적쿼리로 생성할 수 있는가 하는 부분이었습니다. 구체적으로는 특정 조건에서는 join 을 실행하고 아니면 join 을 실행하지 않게 만들 수 있을까요? join 하는 테이블을 명시해야할텐데 그럼 테이블을 명시하고 on 이나 where 로 처리가 가능할지 궁금합니다 두 번째로는 where 절로 쿼리 파라미터를 BooleanBuilder 등을 통해서 쓸 수 있는데 join 의 on 절에 where 에 쓰던 방식 그대로 적용해도 되는지가 궁금합니다.(예외상황이 없는지) 감사합니다
- 미해결실전! Querydsl
8:13 질문
안녕하세요 영한님 감사합니다 ^_^ 08:13 보시면 em.flush를 해주시는데 필수인건가요 ?? flush을 쓰지 않아도 자동으로 나가는걸로 알고있습니다. clear만 해도 될까요?? 실험결과 clear만 써주면 되긴합니다만 flush를 별도로 또 호출해줘야 더 안전한 코드인가요??
- 미해결실전! Querydsl
막조인 차이점
안녕하세요 영한님 -막조인 차이- ===================================== ========================================= 안녕하세요 두개 다 연관관계없는 엔티티 조인인데 값도 똑같이 나오고 차이가 있나요 ??
- 미해결실전! Querydsl
changeTeam의문점
안녕하세요 영한(god)님 질문이 하나있습니다. 지금 changeTeam 을 이용하여 Member의 Team을 바꿔주시는데 이게 em.flush ,clear 하고 조회를 해오면 더티체킹으로 Member의 Team이 잘 바뀌어서(update) 조회됩니다. 근데 문제는 자바 컬렉션에서의 문제입니다 team.getMembers().add(this); 이 결과로 (팀)양쪽에 같은 맴버가 생기는거 같습니다.
- 미해결실전! Querydsl
QueryDsl 테스트 작성 질문있습니다.
그냥 데이터베이스는 여러개가 있어서 entityManager가 여러개 생기는 것을 @Qualifier 로 구분할 수 있더라구요그런데 테스트를 작성할 때 서비스용 디비와 테스트용 디비를 구분하면 테스트 디비의 entityManager 로 JPAQueryFactory 를 생성해야 하는데 이 부분을 어떻게 처리할 수 있을까요?
- 미해결실전! Querydsl
Querydsl SQLExpressions에 listagg 질문있습니다...!
안녕하세요, 김영한 선생님. Querydsl SQLExpressions에 listagg 관련하여 질문이 있습니다. 현재 Projections.constructoer 방식으로 조회한 결과를 Dto로 받고있는데요, SQLExpressions.listagg(컬럼, ",").withinGroup().orderBy(컬럼).getValue().as("listaggs") 로 select후 Dto에서 String으로 못받는데 String으로 받으려면 어떻게 해야 될까요?
- 미해결실전! Querydsl
PageableExecutionUtils 관련 질문
=========================================[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]안녕하세요, 강사님. PageableExecutionUtils을 따라해보았는데, 원하는대로 결과를 확인할 수 없어 질문 남깁니다. 현재, 컨트롤러에서 디버깅 걸면 return 하기 전에 페이징 처리된 결과를 확인할 수 있습니다. 물론, 컨트롤러에 @RestController, @RequiredArgsConsturctor를 모두 붙였습니다. 하지만, Postman으로 확인하니 Response가 이렇게 비어 있습니다. http://localhost:8080/v3/members?size=3&page=0를 크롬 검색창에 입력해도 {}가 출력됩니다. 혼자 해결하려 노력했는데도 해결하지 못하여 질문 남깁니다. 감사합니다.
- 미해결실전! Querydsl
springboot가 아닌 spring을 통한 q-type 컴파일
강의에서는 gradle을 통해 q클래스를 컴파일 하셨는데 gradle이나 maven을 둘다 사용하지 않고 있습니다. ant를 사용하고 있습니다. 혹시 관련 설정 방법을 설명해주실 수 있나요??
- 미해결실전! Querydsl
join_on_filtering 테스트 질문이요!!
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 안녕하세요! 강의 잘 듣고 있습니다. join_on_filtering()테스트에서 다음과 같이 assertthat으로 검증을 했는데 null이 반환되더군요 ㅠ.. @Testpublic void join_on_filtering(){ List<Tuple> result = queryFactory .select(member, team) .from(member) .leftJoin(member.team, team) .on(team.name.eq("teamA")) .orderBy(member.username.asc()) .fetch(); for (Tuple tuple : result) { System.out.println("tuple = " + tuple); } Tuple member1 = result.get(0); Tuple member2 = result.get(1); assertThat(member1.get(team.name)).isEqualTo("teamA"); 그래서 아래와 같이 수정하여 테스트 해봤는데 잘 동작됩니다. @Testpublic void join_on_filtering(){ List<Tuple> result = queryFactory .select(member, team) .from(member) .leftJoin(member.team, team) .on(team.name.eq("teamA")) .orderBy(member.username.asc()) .fetch(); for (Tuple tuple : result) { System.out.println("tuple = " + tuple); } Tuple member1 = result.get(0); Tuple member2 = result.get(1); assertThat(member1.get(team).getName()).isEqualTo("teamA"); assertThat(member2.get(member).getUsername()).isEqualTo("member2"); 이전에 했던 gruop() 테스트 코드에서는 다음과 같이 assertthat 에서 team.name으로 검증을 했었습니다. @Testpublic void group(){ List<Tuple> result = queryFactory .select(team.name, member.age.avg()) .from(member) .join(member.team, team) .groupBy(team.name) .fetch(); Tuple teamA = result.get(0); Tuple teamB = result.get(1); assertThat(teamA.get(team.name)).isEqualTo("teamA"); assertThat(teamA.get(member.age.avg())).isEqualTo(15);} 어째서 join_on_filtering() 에서는 team.name으로 참조를 하지 못하는것일까요??
- 미해결실전! Querydsl
현재 2:30 부분에 ...
현재 강의의 2:30부분에 fetchResults를 사용하려고 보니 decprecated 되어있는데 fetchResult대신에 쓸수있는 것이 혹시 있나요?? 설명에는 fetch()를 대신 사용하라는데 그런건가요?
- 미해결실전! Querydsl
페이징이나 정렬을 엔티티가 아닌 엔티티의 컬럼에 적용시킬 경우에는 어떻게 해야하나요?
안녕하세요. 질문이 있어서 글을 남깁니다! 만약 여러 팀들을 조회 할 때 페이징과 정렬을 팀들이 아닌 팀 안에 있는 멤버들한테 적용시킬 경우에는 어떤 방식으로 해야 할까요? 저는 팀들을 조회하고 그 팀들에 대한 멤버들을 다 따로 조회하였는데 N+1번의 쿼리가 나가서 비효율적인게 아닌가 하는 생각이 듭니다.
- 미해결실전! Querydsl
컨트롤러에서 Repository DTO를 사용해도 될까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)안녕하세요. 컨트롤러 구현에 관해 질문이 있습니다. 나중에 @Valid 를 사용해서 검증을 하게 된다면, Repository 레이어의 DTO 에 컨트롤러 레이어의 어노테이션이 들어가게 되는데요. Repository에 정의된 DTO를 컨트롤러 레이어에서 파라미터로 사용해도 되는지가 궁금합니다. 그렇지 않다면, 컨트롤러에서 사용하는 DTO 를 Repository에 정의된 DTO로 변환하는 작업이 필요할 것 같은데요, 영한님이 선호하는 방식은 어떤 방식인가요?
- 미해결실전! Querydsl
Entity Manager 의존관계 주입
안녕하세요! 강의 마지막 부분에 나온 EntityManager, JPaQueryFactory 생성자 주입 관련하여 궁금한 게 생겨서 질의드립니다. Lombok 의 @RequiredArgsConstructor 를 사용해서 EntityManager 와 JPAQueryFactory 를 생성자 주입하면 좋다. 라고 이야기하셨던 부분과 관련된 질의입니다. 이떄 JPAQueryFactory 객체를 빈으로 등록해놓은 뒤에 @RequiredArgsConstructor 를 사용하셨고 이는, EntityManager 는 빈으로 등록되어 있단 뜻인데 애플리케이션 로딩 시점에 EntityManager 도 자동 등록되나요?그렇다면 자동 등록되게 해둔 이유는 무엇인지도 궁금합니다!
- 미해결실전! Querydsl
외부 모듈 Q타입 생성 방법 문의
안녕하세요? 강의 잘 듣고 있습니다. 외부 모듈에 선언되어 있는 엔티티는 어떻게 Q타입을 생성되나요? 가령 한 프로젝트에서 공통으로 사용하는 엔티티 클래스가 별도 모듈로 따로 있을 경우 해당 모듈에 있는 Q타입 생성하는 방법이 궁금합니다. 구글링 해보니 package-info.java에 @QueryEntites를 이용하는 방법이 있던데, 이 방법 말고는 없나요?
- 미해결실전! Querydsl
fetchResults deprecated에 대해서
[질문 내용] intellij 에서 fetchResult가 deprecated 되었다고 해서 찾아보았는데 아래와 같이 fetch()로 받고, size()는 java에서 연산해주는 방식으로 처리해주고 있는데 강의에서 알려주신 fetchResult()가 fetch()에 대해서 가지는 이점이 무엇인지 알 수 있을까요? 또 이렇게 자바에서 count를 해준다면 db로 count query를 추가적으로 작성하는 것보다 db부담이 덜해 효율적이라고 생각되는데 .. 혹시 따로count query가 쓰이는 이유가 있을까요? 감사합니다.
- 미해결실전! Querydsl
여러 인덱스 중 하나를 타게 할 수 없을까요?
안녕하세요.^^ 강의 잘 듣고 열심히 공부 중입니다. jpa + querydsl 공부 도중에 궁금한 것이 하나 생겼습니다. querydsl 에서 여러 인덱스 중에 하나를 강제로 타도록 할 수는 없나요? native query로는 mysql 같은 경우 use index를 쓰면 되는데 querydsl 에는 어떻게 할 수 없을까 무식하게 갑자기 고민하고 고민하다가 혹시 방법이 있나 없나 궁금해서 질문 들여봅니다.