분류 전체보기
-
[Spring] querydsl - 수정, 삭제 벌크 연산Spring 2022. 1. 5. 17:21
@Test public void bulkTest() throws Exception { long count = queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); long count2 = queryFactory .update(member) .set(member.age, member.age.add(1)) .execute(); long count3 = queryFactory .delete(member) .where(member.age.gt(18)) .execute(); } 주의: JPQL 배치와 마찬가지로, 영속성 컨텍스트에 있는 엔티티를 무시하고 실행되기 때문에 배치 쿼리를 실행하고 나면 ..
-
[Spring] querydsl - 동적쿼리 만드는 법Spring 2022. 1. 5. 12:35
BooleanExpression을 써 쿼리를 조합하며 사용할 수 있다. private List searchMember2(String usernameCond, Integer ageCond) { return queryFactory .selectFrom(member) .where(usernameEq(usernameCond), ageEq(ageCond)) .fetch(); } private List searchMember3(String usernameCond, Integer ageCond) { return queryFactory .selectFrom(member) .where(allEq(usernameCond, ageCond)) .fetch(); } private BooleanExpression username..
-
[Spring] querydsl - 프로젝션과 결과 반환 방법Spring 2022. 1. 5. 01:18
추천하는 방법에는 크게 두가지가 있다. - 필드 직접 접근 - @QueryProjection 사용 필드 직접 접근 @Test public void findDtoByField() throws Exception{ List result = queryFactory .select(Projections.fields(MemberDto.class, member.username, member.age)) .from(member) .fetch(); } 필드에 직접 접근하기 때문에 생성자 등이 필요없다. 별칭이 다르거나 새로운 컬럼을 쓸 때도 as등을 이용해 활용 가능하다. @Data public class UserDto { private String name; private int age; } @Test public voi..
-
[Spring] querydsl - 임의의 기준으로 정렬을 하고 싶다면Spring 2022. 1. 5. 00:04
NumberExpression rankPath = new CaseBuilder() .when(member.age.between(0, 20)).then(2) .when(member.age.between(21, 30)).then(1) .otherwise(3); List result = queryFactory .select(member.username, member.age, rankPath) .from(member) .orderBy(rankPath.desc()) .fetch(); for (Tuple tuple : result) { String username = tuple.get(member.username); Integer age = tuple.get(member.age); Integer rank = tup..
-
[Spring] AssertJ 정리Spring 2022. 1. 4. 01:41
assertj는 자바 테스트에 사용되며, 메소드 체이닝을 통해 테스트코드의 가독성과 편의성을 높여주는 라이브러리다. Assertion description assertion이 수행될 때 설명을 추가할 수 있다. as라는 메소드로 지정할 수 있는데 assertion이 수행되기전에 작성되야한다. TolkienCharacter frodo = new TolkienCharacter("Frodo", 33, Race.HOBBIT); assertThat(frodo.getAge()).as("check %s's age", frodo.getName()) .isEqualTo(100); Filtering assertions @Test void filter_test() { List list = new ArrayList(); Hu..
-
[Spring] querydsl - joinSpring 2022. 1. 3. 23:16
기본 조인 @Test public void join() throws Exception { QMember member = QMember.member; QTeam team = QTeam.team; List result = queryFactory .selectFrom(member) .join(member.team, team) .where(team.name.eq("teamA")) .fetch(); assertThat(result) .extracting("username") .containsExactly("member1", "member2"); } } join은 innerjoin과 같은 개념이다. left join과 right join 모두 가능하다. 세타 조인 @Test public void theta_join..
-
[Spring] querydsl - pagingSpring 2022. 1. 3. 22:45
querydsl 5.0.0버전부터는 fetchResults()와 fetchCount()메소드가 deprecated됬기 때문에 다른방법이 필요하다. Pageable 인터페이스와 PageImpl을 이용하면 비교적 쉽게 페이징할 수 있다. @Override public Page searchPageSimple(MemberSearchCondition condition, Pageable pageable) { List content = jpaQueryFactory .select(new QMemberTeamDto( member.id, member.username, member.age, team.id, team.name)) .from(member) .leftJoin(member.team, team) .where(user..
-
[Spring] @RequestParam 와 @PathVariableSpring 2022. 1. 3. 22:33
controller 단에서 클라이언트에서 url에 파라미터를 같이 전달 하는 경우가 잦다. 그 중 가장 흔한 방법 두가지가 있는데 바로 @ResquestParam 과 @PathVariable이다. @RequestParam ex)/url?param1=2¶m2="***" RequestParam에는 4가지의 파라미터를 갖고 있다. - defaultValue : 값이 없을 때 기본으로 전달할 값 - name : uri에서 바인딩할 파라미터의 이름 - value : uri에서 바인딩하여 별칭으로 정할 값 - required : 필수적으로 값이 전달되어져야 함을 결정하는 값 @GetMapping("getParam") public String viewName( @RequestParam("param1") Str..