Java

아래 세가지 지원 기능은 제약이 커서 복잡한 실무 환경에서의 사용은 선택적으로! 1. 인터페이스 지원 - QuerydslPredicateExecutor Pageable, Sort 지원 // 리포지토리에 적용 public interface MemberRepository extends JpaRepository, CustomMemberRepository, QuerydslPredicateExecutor { ... } // 서비스에서 사용 Iterable result = memberRepository.findAll( member.age.between(10, 40) .and(member.username.eq("1"))); 한계 외부 조인 불가능 (묵시적 조인 가능) 클라이언트가 Querydsl 구현기술에 의존 2...
스프링 데이터 JPA 리포지토리로 변경 public interface MemberRepository extends JpaRepository { List findByUsername(String username); } 테스트 @SpringBootTest @Transactional class MemberRepositoryTest { @Autowired EntityManager em; @Autowired MemberRepository memberRepository; @Test public void basicTest() { Member member = new Member("member1", 10); memberRepository.save(member); Member findMember = memberReposit..
순수 JPA 리포지토리와 Querydsl 스프링이 주입하는 em은 실제 동작 시점에 트랜잭션 단위로 진짜 엔티티 매니저를 찾아주는 프록시 엔티티 매니저임 JPAQueryFactory를 메인 어플리케이션 클래스에 Bean으로 등록하고, 리포지토리에서 주입받아도 됨 장점: @RequiredArgsConstructor 활용해 리포지토리 코드 짤 때 깔끔함 단점: 두 개를 주입받아야 하므로 테스트코드 짤 때 불편함 @Bean JPAQueryFactory jpaQueryFactory(EntityManager em) { return new JPAQueryFactory(em); } 리포지토리 @Repository public class MemberJpaRepository { private final EntityMan..
* F2: IntelliJ 오류난 곳으로 바로 이동 프로젝션과 결과 반환 - 기본 프로젝션: select 대상 지정 튜플은 querydsl 종속적인 자료형이기 때문에 repository 계층이 아닌 controller나 service 단에서는 사용 지양 다른 계층으로 넘길 때는 DTO 사용 권장 // 프로젝션 대상 하나 @Test public void simpleProjection() { List result = queryFactory .select(member.username) // 이름만 지정 .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); } } // 프로젝션 대상 여러개 @Test public voi..
기초 설정 스프링, Querydsl 버전에 따라 설정하는 법이 계속 바뀜 강의 수강 시점에서의 설정 방법: https://www.inflearn.com/chats/669477 Q파일은 gitignore Q타입 생성 확인 후 테스트 케이스로 실행 검증 h2 설치 및 설정 -> sql 로그 출력, 쿼리 파라미터 로그 출력(운영 단계에서는 성능 테스트하고 사용) # application.yml spring: profiles: active: local datasource: url: jdbc:h2:tcp://localhost/~/querydsl username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create proper..
경로 표현식 .(점)을 찍어 객체 그래프 탐색 상태 필드: 단순히 값을 저장하기 위한 필드 예: m.username 연관 필드: 연관관계를 위한 필드 단일 값 연관 필드: 대상이 엔티티, @ManyToOne, @OneToOne 예: m.team 컬렉션 값 연관 필드: 대상이 컬렉션, @OneToMany, @ManyToMany 예: m.orders 특징 상태 필드: 경로 탐색의 끝, 더 이상 탐색 불가 예: select m.username, m.age from Member m 단일 값 연관 경로: 묵시적 내부 조인 발생, 더 탐색 가능 예: select o.member from Order o 탐색 시 자바로는 .(점)만 찍으면 되기 때문에 편하지만 db에서는 조인이 일어나므로 사용 지양 컬렉션 값 연관 경..
문법예) select m from Member as m where m.age > 18엔티티와 속성은 대소문자 구분 (Member, age)JPQL 키워드는 대소문자 구분 X (select, from, where)엔티티 이름 사용 (테이블명 X)별칭 필수 (m), as 생략 가능집합과 정렬TypeQuery, QueryTypeQuery: 반환 타입 명확할 때Query: 반환 타입 명확하지 않을 때 TypedQuery q1 = em.createQuery("select m from Member as m where m.age > 18", Member.class); Query q2 = em.createQuery("select m.username, m.age from Member as m where m.a..
1. 몽고db - 스프링 스프링에서 mongodb atlas 연결 1. mongodb atlas 에서 connect my application에서 java와 버전 선택후 url 가져오기 2. mongodb atlas 에서 해당 클러스터 db connection, network connection에서 권한과 ip주소 잘 설정하기 3. 스프링 application.properties 잘 설정 후 나의 경우에는 깃헙 secrets에 잘 업데이트 하고 배포하기 코드 // build.gradle // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb implementation group: 'org...
소셜 로그인을 제외하고 백엔드에서 맡은 API는 모두 구현하고, CORS 설정까지 마친 후 배포했다. 오늘의 관건은 엑셀파일에 저장한 데이터를 MySql로 코드를 통해 저장하는 것과 CORS 연결이었다. 1. 엑셀 MySql RDB에 저장 코드로 xslx 파일을 열어 첫번째 시트의 각 행에 대해 for문으로 돌면서 각 열의 데이터를 추출해 미리 만들어논 엔티티에 넣고, 그 엔티티들을 리스트에 넣어 최종적으로 saveAll을 통해 저장했다 https://shinsunyoung.tistory.com/71 SpringBoot의 POI을 이용해서 엑셀 파일 읽기 안녕하세요! 이번 포스팅에서는 SpringBoot의 POI를 이용해서 엑셀 데이터를 읽고 뷰에 뿌리는 코드를 작성해보겠습니다. 👩🏻‍💻 전체 코드는 G..
상속관계 매핑: 객체의 상속 관계와 DB의 슈퍼타입, 서브타입 관계 매핑 객체는 상속관계 존재 RDB는 상속관계 X 슈퍼타입, 서브타입 관계라는 유사한 논리 모델링 기법 존재 이 논리 모델을 물리 모델로 구현하는 방법 1. 조인 전략 2. 단일 테이블 전략 3. 구현 클래스마다 테이블 전략 객체 입장에서는 아무 변화가 없고, DB설계를 어떻게 할 것이냐 결정하는 것 JPA는 세가지 방법 모두 지원 (기본 설정: 단일 테이블 전략) // Item class @Entity public class Item { @Id @GeneratedValue private Long id; private String name; private int price; // Album class @Entity public class ..
hjkim0502
'Java' 태그의 글 목록