본문 바로가기

전체 글147

코틀린에서 JPA를 사용할 때 고려할 점(SETTER, 생성자 안의 프로퍼티, data class) 인프런 최태현님의 실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기를 보고 정리하였습니다. 코틀린에서 JPA를 사용할 때 고려할 점을 하나씩 살펴보자! 1. setter를 어떻게 처리할까? setter를 사용하는 것보다 좋은 이름의 함수를 사용하는 것이 훨씬 clean하다. 하지만 코틀린에서 생성자 필드를 생성하면 setter는 public이다. 따라서 setter를 사용할 수도 있다. public getter는 필요하다. 방법1. setter를 private로 닫는다. backing property를 사용한다. 방법2. custom setter를 이용한다. class User( name: String ) { val name = name private set // set을 잠군다 } 하지만, .. 2022. 8. 28.
코틀린 기본내용을 모두 정리해보자 코틀린을 다시 정리해보자! 우아한테크코스 서비스 근로 크루들과 ‘코틀린 인 액션’ 책으로 한번 공부를 하였지만 다시한번 초심의 마음으로 정리를 한번 해보고자 한다. 인프런 최태현님의 자바 개발자를 위한 코틀린 입문 강의를 보고 정리하였다. 코틀린에 관한 TMI 코틀린은 IntelliJ를 만든 JetBrains 회사에서 만들었다. IntelliJ가 Java로 작성되어 있는데 유지보수 하다가 화가 났다고한다. 코틀린은 Java와 100% 호환 가능하다. 코틀린은 정적 타입 언어이다. (구성 요소를 컴파일 시점에 알 수 있다) 코틀린에서 별도의 지시어를 붙이지 않으면 모두 public 이다. 1. 변수 다루기 모든 변수는 val로 만들고 꼭 필요한 경우만 var로 변경한다. 코틀린에서의 원시 타입 long v.. 2022. 8. 27.
QueryDSL에서 수정, 삭제 벌크연산 하는방법을 알아보자 수정, 삭제 배치쿼리를 해보자 배치쿼리를 적용한 경우 JPQL 배치와 마찬가지로, 영속성 컨텍스트에 있는 엔티티를 무시하고 실행되기 때문에 배치 쿼리를 실행하고 나면 영속성 컨텍스트를 초기화 하는 것이 안전하다. 쿼리 한번으로 대량 데이터를 수정해보자 1. 수정 예제 비회원으로 변경(28이하) 더하기 long count = queryFactory .update(member) .set(member.age, member.age.add(1)) .execute(); 곱하기 long count = queryFactory .update(member) .set(member.age, member.age.multiply(2)) .execute(); 2. 삭제 예제 long count = queryFactory .dele.. 2022. 8. 26.
[QueryDSL] 동적쿼리를 해결해보자 동적쿼리를 해결해보자 해결하는 방법은 두 가지 방법이 있다. BooleanBuilder Where 다중 파라미터 사용 하나씩 살펴보자! 1. BooleanBuilder null이 아닌 경우에만 검증 로직을 적용하고 싶을 때 다음과 같이 적용할 수 있다. 2. Where 다중 파라미터 사용 (실무에서 많이 사용한다!) by 김영한님 이 방법을 사용하면 코드가 한층 깔끔해진다. 아래 코드를 보고 바로 이해할 수 있기 때문이다. private List searchMember2(String usernameCond, Integer ageCond) { return queryFactory .selectFrom(member) .where(usernameEq(usernameCond), ageEq(ageCond)) .fe.. 2022. 8. 26.
[QueryDSL] 프로젝션(SELECT 대상)에 따라 다른 결과를 가져와 보자 1. 프로젝션에 대상 개수에 따른 결과 프로젝션은 SELECT 대상 지정이다. 1-1. 대상이 하나일 때 타입을 명확하게 지정할 수 있다. 1-2. 대상이 둘 이상 List result = queryFactory .select(member.username, member.age) .from(member) .fetch(); for (Tuple tuple : result) { String username = tuple.get(member.username); Integer age = tuple.get(member.age); System.out.println("username=" + username); System.out.println("age=" + age); } 대상이 둘 이상이면 튜플이나 DTO로 조회하자 .. 2022. 8. 26.
[QueryDSL] 기본 문법을 알아보자 1. JPQL vs Querydsl를 비교하여 장점을 알아보자 예제로 비교해보자. member1를 찾아보자 JPQL를 사용한 예제 String query ="select m from Member m where m.username = :username"; Member findMember = em.createQuery(query, Member.class) .setParameter("username", "member1") .getSingleResult(); assertThat(findMember.getUsername()).isEqualTo("member1"); Querydsl를 사용한 예제 JPAQueryFactory를 사용한다. 컴파일 시점에 오류를 발견한다. 파라미터 바인딩을 알아서 해준다. 쿼리를 자바코.. 2022. 8. 26.