분류 전체보기333 JPA - 객체지향 쿼리 언어 - QueryDSL 프로젝션 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 프로젝션 (Tuple) 조회를 하다보면 하나의 엔티티 형태가 아닌 여러 컬럼으로 이루어진 정보를 조회해야 할 때가 있다. 이때에는 JPQL 에서 살펴본것과 같이 Map 과 비슷한 방식의 Tuple 을 사용하면 된다. JPAQueryFactory query = new JPAQueryFactory(em); QMember m = new QMember("m"); List members = query.select(m.name, m.age) .from(m) .where(m.age.gt(10)) .fetch(); members.forEach(member -> { System.out.println("Member's name: " + member.get(m.name) +.. 2021. 8. 21. 객체지향의 사실과 오해 - 객체지향의 핵심 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 객체지향의 핵심, 메시지 객체지향이라는 단어를 들으면 가장 먼저 생각나는것은 클래스이다. 프로그램을 구현하라고 하면 우리가 가장 먼저 하는 일은 클래스를 선언하고 속성과 메소드를 채워넣는것이다. 그리고 클래스간의 의존성을 관리하며 상속도 사용한다. 하지만 객체지향의 강력함은 객체들이 주고 받는 메시지에서 나온다. 따라서 객체들의 속성과 행위를 먼저 식별해야 한다. 클래스는 단지 객체들의 특성과 행위를 정적으로 표현하는 추상화 도구일뿐이다. 문제는 클래스보다 객체를 우선시한다고 해결되지 않는다는 것이다. 객체들의 속성과 행위를 먼저 식별해야 한다는 말을 개별적인 객체에 집중하라는 의도로 오.. 2021. 8. 18. JPA - 객체지향 쿼리 언어 - QueryDSL Join, 서브쿼리 - 참조: 자바 ORM 표준 JPA 프로그래밍 - Join QueryDSL 에서 Join 은 innerJoin, leftJoin, rightJoin, fullJoin 을 지원한다. 또한 JPQL 의 on 과 fetch 기능도 사용가능하다. join 을 사용할때에는 1번째 파라미터에 조인 대상을, 2번째 파라미터에 alias 를 지정한다. 귀찮지만 Join 예제를 실행해보기 위해 Member 엔티티와 Order 엔티티가 맵핑된 데이터를 만들어주자. Member member1 = new Member(); member1.setName("Name#1"); member1.setAge(10); member1.setAddress( new Address("City#1", "Street#1", "Zipcode#1"));.. 2021. 8. 18. 객체지향의 사실과 오해 - 메시지와 메소드 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 책임 객체는 다른 객체로 부터 요청을 수신하였을 때 이 요청을 자율적으로 처리할 수 있는 존재여야 한다. 그리고 이때 객체가 처리하기 위해 수행하는 행동을 책임이라고 부른다. 앞의 역할,책임,협력 글에서 왕은 모자장수에게 '증언하라' 는 메시지를 전달했다. 메시지는 수신자의 책임을 암시하므로 모자장수는 증언해야할 책임이 생긴다. 왕은 모자장수가 증언만 수행할 수 있다면 어떤식으로 하든지 방법에는 신경쓰지 않는다. 말이나 글로 혹은 영상 녹화본이 있다면 영상을 제출할 수도 있다. 만약 왕이 모자장수에게 요청하는 내용이 아주 세부적이라면 어떻게 될까? 간결하게 '증언하라' 라고 요청했을 때와.. 2021. 8. 16. JPA - 객체지향 쿼리 언어 - QueryDSL 검색조건, 페이징, 그룹 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 검색조건 QueryDSL 에서 검색조건 where 절의 기본 사용법을 알아보자. JPAQueryFactory query = new JPAQueryFactory(em); QMember qMember = QMember.member; List members = query.select(qMember) .from(qMember) .where(qMember.age.gt(20) .and(qMember.address.city.eq("City#2"))) .orderBy(qMember.age.desc()) .fetch(); members.forEach(member -> { System.out.println("Member age: " + member.getAge()); }).. 2021. 8. 16. JPA - 객체지향 쿼리 언어 - QueryDSL 시작 - 참조: 자바 ORM 표준 JPA 프로그래밍 - QueryDSL 시작 여태까지 살펴본 Criteria 는 문자열로 작성한 JPQL 과는 다르게 문법 오류를 컴파일에서 잡을 수 있었지만 코드를 살펴보면 직관적이지 않은 부분이 있었다. QueryDSL 은 HQL 을 코드로 작성하기 위한 오픈소스 프로젝트 였지만 현재는 JPA, JDO, JDBC 등 여러 디비 제품군을 지원하고 있다. - 설정 JPA 카테고리 JPA - 객체지향 쿼리 언어 - 개요 글에서 QueryDSL 설정법을 살펴본적이 있지만 다시 한번 살펴보도록 하자. com.querydsl querydsl-apt provided com.querydsl querydsl-jpa ............ com.mysema.maven apt-maven-pl.. 2021. 8. 16. 객체지향의 사실과 오해 - 역할, 책임, 협력 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 협력 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작한다. 요청받은 사람은 일을 처리한 후 요청자에게 응답하는데 만약 자신이 혼자서 처리할 수 없는 일을 맞이하면 다른사람에게 요청한다. 이처럼 협력은 다수의 연쇄적인 요청과 응답으로 구성되어 있다. 이상한 나라의 엘리스에서 하트 잭은 파이를 훔쳤다는 혐의로 재판을 받는다. 판사 역할을 맡은 왕은 토끼에게 증인을 부르라고 명령한다. 모자장수가 증인으로 등장하고 증언을 마친 후 퇴장한다. 이렇게 하트 잭을 재판하는 과정은 일종의 협력이라고 볼 수 있다. 위의 다이어그램은 재판의 과정을 도식화하여 나타낸 UML 협력 다이어그램이다. 재판.. 2021. 8. 13. JPA - 객체지향 쿼리 언어 - Criteria 메타 모델 API - 참조: 자바 ORM 표준 JPA 프로그래밍 - 메타모델 API 설정: https://docs.jboss.org/hibernate/orm/5.4/topical/html_single/metamodelgen/MetamodelGenerator.html - 메타 모델 API 객체 지향 쿼리언어에서 JPQL 과 Citeria 를 살펴보았다. select generatedAlias0 from Member as generatedAlias0 where generatedAlias0.age>=20 ...................... CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(Member.class); Root m =.. 2021. 8. 13. JPA - 객체지향 쿼리 언어 - Criteria 파라미터, 네이티브 함수 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 파라미터 JPQL 에서 :username 으로 파라미터를 정의한것처럼 Criteria 에서도 해당 기능을 제공한다. CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(Member.class); Root m = cq.from(Member.class); cq.select(m) .where(cb.equal(m.get("name"), cb.parameter(String.class, "userNameParam"))); List members = em.createQuery(cq) .setParameter("userNameParam", "Name#4") .getResultLi.. 2021. 8. 12. 객체지향의 사실과 오해 - 타입과 추상화 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - Javascript 프로토타입 상속: https://developer.mozilla.org/ko/docs/Web/JavaScript/Inheritance_and_the_prototype_chain - 추상화와 복잡성 초기의 지하철 노선도는 실제 지형을 참조한 곡선의 경로와 역간의 위치 거리 등의 정보를 충실하게 반영했었다. 하지만 현재 노선도는 직선 형태이며 역간의 거리도 실제 거리와는 무관하다. 그럼에도 목적지까지 이동하는데 불편함이 없다. 추상화의 본질은 사용자의 목적을 달성할 수만 있다면 복잡한 정보를 제거함으로써 본질을 드러내게 하는것이다. 복잡성을 다루기 위해 추상화는 두 가지 .. 2021. 8. 12. 이전 1 ··· 14 15 16 17 18 19 20 ··· 34 다음