목록분류 전체보기 (572)
오봉이와 함께하는 개발 블로그
동적 쿼리와 성능 최적화 조회 - Builder 사용 MemberTeamDto - 조회 최적화용 DTO 추가 @Data public class MemberTeamDto { private Long memberId; private String usename; private int age; private Long teamId; private String teamName; @QueryProjection public MemberTeamDto(Long memberId, String usename, int age, Long teamId, String teamName) { this.memberId = memberId; this.usename = usename; this.age = age; this.teamId = te..
순수 JPA 리포지토리와 Querydsl 순수 JPA 리포지토리 @Repository public class MemberJapRepository { private final EntityManager em; private final JPAQueryFactory queryFactory; public MemberJapRepository(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.find(Member.clas..
SQL function 호출하기 SQL function은 JPA와 같이 방언(Dialect)에 등록된 내용만 호출할 수 있다. member -> M으로 변경하는 replace 함수 사용 @Test void sqlFunction() { List result = queryFactory .select(Expressions.stringTemplate( "function('replace', {0}, {1}, {2})", member.username, "member", "M")) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); } } s = M1 s = M2 s = M3 s = M4소문자로 변경해서 비교..
수정, 삭제 벌크 연산 JPA는 기본적으로 변경 감지(Dirty Checking)를 통해서 업데이트 처리 하는데, 변경 감지를 통한 업데이트는 업데이트 쿼리가 건당 하나씩 나가기 때문에 대량의 데이터를 변경할 때 사용하기 적합하지 않다. 쿼리 한번으로 대량 데이터 수정 @Test void bulkUpdate() { // member 1 = 10 -> 비회원 // member 2 = 20 -> 비회원 long count = queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); assertThat(count).isEqualTo(2); } 기존 숫자에 1 더하기 @Test void bulkAd..
동적 쿼리 - Where 다중 파라미터 사용 private List searchMember2(String usernameCond, Integer ageCond) { return queryFactory .selectFrom(member) .where(usernameEq(usernameCond), ageEq(ageCond)) .fetch(); } private BooleanExpression usernameEq(String usernameCond) { if (usernameCond == null) { return null; } return member.username.eq(usernameCond); // return usernameCond != null ? member.username.eq(usernameC..