Submit Search
Upload
Querydsl
•
38 likes
•
2,215 views
Younghan Kim
Follow
2012 KSUG 세미나에서 발표한 Querydsl에 대한 내용입니다.
Read less
Read more
Software
Report
Share
Report
Share
1 of 121
Download now
Download to read offline
Recommended
Pinterest的数据库分片架构
Pinterest的数据库分片架构
Tommy Chiu
The Semantic Web And The News
The Semantic Web And The News
kaellis
SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프
Younghan Kim
Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리
Younghan Kim
Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개
Younghan Kim
Ksug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpa
Younghan Kim
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON
Younghan Kim
Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조
Younghan Kim
Recommended
Pinterest的数据库分片架构
Pinterest的数据库分片架构
Tommy Chiu
The Semantic Web And The News
The Semantic Web And The News
kaellis
SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프
Younghan Kim
Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리
Younghan Kim
Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개
Younghan Kim
Ksug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpa
Younghan Kim
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON
Younghan Kim
Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조
Younghan Kim
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
Younghan Kim
spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼
라한사 아
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
경원 이
Mobile app security nov 2015
Mobile app security nov 2015
Chanjin Park
Querydsl overview 2014
Querydsl overview 2014
Timo Westkämper
몽고디비사용자교육2일차 v0.5
몽고디비사용자교육2일차 v0.5
seung-hyun Park
R과sql비교 퀵하게보기
R과sql비교 퀵하게보기
seung-hyun Park
Query DSL In Elasticsearch
Query DSL In Elasticsearch
Knoldus Inc.
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법
Youngjun Chang
OOPS in javascript
OOPS in javascript
Vijaya Anand
Why javaScript?
Why javaScript?
Kim Hunmin
Hibernate start (하이버네이트 시작하기)
Hibernate start (하이버네이트 시작하기)
visual khh
Big query at GDG Korea Cloud meetup
Big query at GDG Korea Cloud meetup
Jude Kim
BeLAUNCH2014 x HACKATHON week 3
BeLAUNCH2014 x HACKATHON week 3
Chan Lee
Computer Vision - Artificial Intelligence
Computer Vision - Artificial Intelligence
ACM-KU
미티어 리엑티비티 ( reactivity of meteor )
미티어 리엑티비티 ( reactivity of meteor )
seung-hyun Park
Javascript and Web Performance
Javascript and Web Performance
Jonathan Jeon
3. collection
3. collection
seung-hyun Park
1. 미티어의 폴더구조
1. 미티어의 폴더구조
seung-hyun Park
5.router
5.router
seung-hyun Park
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
OnePlan Solutions
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Steffen Staab
More Related Content
Viewers also liked
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
Younghan Kim
spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼
라한사 아
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
경원 이
Mobile app security nov 2015
Mobile app security nov 2015
Chanjin Park
Querydsl overview 2014
Querydsl overview 2014
Timo Westkämper
몽고디비사용자교육2일차 v0.5
몽고디비사용자교육2일차 v0.5
seung-hyun Park
R과sql비교 퀵하게보기
R과sql비교 퀵하게보기
seung-hyun Park
Query DSL In Elasticsearch
Query DSL In Elasticsearch
Knoldus Inc.
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법
Youngjun Chang
OOPS in javascript
OOPS in javascript
Vijaya Anand
Why javaScript?
Why javaScript?
Kim Hunmin
Hibernate start (하이버네이트 시작하기)
Hibernate start (하이버네이트 시작하기)
visual khh
Big query at GDG Korea Cloud meetup
Big query at GDG Korea Cloud meetup
Jude Kim
BeLAUNCH2014 x HACKATHON week 3
BeLAUNCH2014 x HACKATHON week 3
Chan Lee
Computer Vision - Artificial Intelligence
Computer Vision - Artificial Intelligence
ACM-KU
미티어 리엑티비티 ( reactivity of meteor )
미티어 리엑티비티 ( reactivity of meteor )
seung-hyun Park
Javascript and Web Performance
Javascript and Web Performance
Jonathan Jeon
3. collection
3. collection
seung-hyun Park
1. 미티어의 폴더구조
1. 미티어의 폴더구조
seung-hyun Park
5.router
5.router
seung-hyun Park
Viewers also liked
(20)
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
Mobile app security nov 2015
Mobile app security nov 2015
Querydsl overview 2014
Querydsl overview 2014
몽고디비사용자교육2일차 v0.5
몽고디비사용자교육2일차 v0.5
R과sql비교 퀵하게보기
R과sql비교 퀵하게보기
Query DSL In Elasticsearch
Query DSL In Elasticsearch
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법
OOPS in javascript
OOPS in javascript
Why javaScript?
Why javaScript?
Hibernate start (하이버네이트 시작하기)
Hibernate start (하이버네이트 시작하기)
Big query at GDG Korea Cloud meetup
Big query at GDG Korea Cloud meetup
BeLAUNCH2014 x HACKATHON week 3
BeLAUNCH2014 x HACKATHON week 3
Computer Vision - Artificial Intelligence
Computer Vision - Artificial Intelligence
미티어 리엑티비티 ( reactivity of meteor )
미티어 리엑티비티 ( reactivity of meteor )
Javascript and Web Performance
Javascript and Web Performance
3. collection
3. collection
1. 미티어의 폴더구조
1. 미티어의 폴더구조
5.router
5.router
Recently uploaded
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
OnePlan Solutions
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Steffen Staab
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
kellynguyen01
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
panagenda
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
Willy Marroquin (WillyDevNET)
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
Delhi Call girls
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
SolGuruz
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
ComplianceQuest1
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
AxelRicardoTrocheRiq
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Call Girls In Delhi Whatsup 9873940964 Enjoy Unlimited Pleasure
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
kalichargn70th171
DNT_Corporate presentation know about us
DNT_Corporate presentation know about us
Dynamic Netsoft
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
MyIntelliSource, Inc.
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
ABDERRAOUF MEHENNI
Software Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
Arshad QA
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
Wave PLM
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Alberto González Trastoy
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
shikhaohhpro
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
anilsa9823
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Delhi Whatsup 9873940964 Enjoy Unlimited Pleasure
Recently uploaded
(20)
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
DNT_Corporate presentation know about us
DNT_Corporate presentation know about us
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
Software Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Querydsl
1.
QueryDSL type-safe
2.
Query 발표자
3.
:
4.
김영한 12년 12월 7일
금요일
5.
목차 •문제 •JPA
6.
Query •QueryDSL? •QueryDSL-JPA •기능
7.
살펴보기 •Spring
8.
Data
9.
JPA
10.
+
11.
Querydsl 12년 12월 7일
금요일
12.
문제 12년 12월 7일
금요일
13.
긴급
14.
요구사항 •검색조건
15.
추가 •나이 •이름 •퇴근시간
16.
10분전... 12년 12월 7일
금요일
17.
기능
18.
추가 이정도는 발로 만들어 주지 12년
12월 7일 금요일
19.
쿼리
20.
추가 String
21.
sql
22.
= “select
23.
*
24.
from
25.
member”
26.
+ “where
27.
name
28.
like
29.
?”
30.
+ “and
31.
age
32.
between
33.
?
34.
and
35.
?” 12년 12월 7일
금요일
36.
컴파일
37.
완료 12년 12월 7일
금요일
38.
배포
39.
완료 12년 12월 7일
금요일
40.
퇴근
41.
완료 12년 12월 7일
금요일
42.
버그
43.
발생 12년 12월 7일
금요일
44.
리콜
45.
완료?? 그럴리가
46.
없어 분명
47.
빌드는
48.
성공했어! 12년 12월 7일
금요일
49.
버그 String
50.
sql
51.
= “select
52.
*
53.
from
54.
member”
55.
+ “where
56.
name
57.
like
58.
?”
59.
+ “and
60.
age
61.
between
62.
?
63.
and
64.
?” [합치면] “select
65.
*
66.
from
67.
memberwhere
68.
name
69.
like
70.
?and
71.
age
72.
between
73.
?
74.
and
75.
?” 12년 12월 7일
금요일
76.
QUERY의
77.
문제점 •QUERY는
78.
문자,
79.
Type-check
80.
불가능 •실행해
81.
보기
82.
전까지
83.
작동여부
84.
확인
85.
불가 12년 12월 7일
금요일
86.
에러는
87.
크게
88.
2가지 •컴파일
89.
에러
90.
(좋은
91.
에러) •런타임
92.
에러
93.
(나쁜
94.
에러) 12년 12월 7일
금요일
95.
도메인
96.
고수? 전
97.
SQL을
98.
빨리
99.
작성하기
100.
위해
101.
컬럼명
102.
정도는
103.
모두
104.
외운답니다. SELECT
105.
NAME,
106.
AGE
107.
.. 12년 12월 7일
금요일
108.
SQL... •만약
109.
SQL이
110.
Class처럼
111.
Type이
112.
있고
113.
Java코 드로
114.
작성
115.
할
116.
수
117.
있다면? •type-safe 12년 12월 7일
금요일
118.
Type-safe •컴파일시
119.
에러
120.
체크
121.
가능 •Code-assistant
122.
x
123.
100!!! •CTRL
124.
+
125.
SPACE
126.
+
127.
.
128.
(DOT) 12년 12월 7일
금요일
129.
QueryDSL-SQL •SQL을
130.
Java
131.
로
132.
type-safe하게
133.
개발
134.
할
135.
수
136.
있는
137.
프레임워크 12년 12월 7일
금요일
138.
QueryDSL-SQL 12년 12월 7일
금요일
139.
QueryDSL •하지만
140.
지금은
141.
ORM시대???? 12년 12월 7일
금요일
142.
JPA
143.
Query java
144.
ORM 12년 12월 7일
금요일
145.
질문
146.
:
147.
사람을
148.
찾아보자 •20~40살 •성
149.
=
150.
김씨 •나이
151.
많은
152.
순서 •3명을
153.
출력하라. 12년 12월 7일
금요일
154.
회원 @Entity public
155.
class
156.
Member
157.
{
158.
@Id
159.
@GeneratedValue
160.
private
161.
Long
162.
id;
163.
private
164.
String
165.
name;
166.
private
167.
int
168.
age; ... } 12년 12월 7일
금요일
169.
회원
170.
Table
171.
172.
173.
174.
create
175.
table
176.
Member
177.
(
178.
179.
180.
181.
182.
183.
184.
185.
id
186.
bigint
187.
auto
188.
primary
189.
key,
190.
191.
192.
193.
194.
195.
196.
197.
age
198.
integer
199.
not
200.
null,
201.
202.
203.
204.
205.
206.
207.
208.
name
209.
varchar(255)
210.
211.
212.
213.
) 12년 12월 7일
금요일
214.
JPA
215.
에서
216.
QUERY
217.
방법은 크게
218.
3가지 •1.
219.
JPQL(HQL) •2.
220.
Criteria
221.
API •3.
222.
MetaModel
223.
Criteria
224.
API(type-safe) 12년 12월 7일
금요일
225.
1.
226.
JPQL(HQL)
227.
@Test
228.
public
229.
void
230.
jpaJpqlQuery()
231.
{
232.
233.
234.
235.
String
236.
query
237.
=
238.
239.
240.
241.
242.
select
243.
m
244.
from
245.
Member
246.
m
247.
248.
+
249.
250.
251.
252.
where
253.
m.age
254.
between
255.
20
256.
and
257.
40
258.
259.
+
260.
261.
262.
263.
264.
265.
266.
and
267.
m.name
268.
like
269.
'김%'
270.
271.
+
272.
273.
274.
275.
order
276.
by
277.
m.age
278.
desc;
279.
280.
281.
282.
ListMember
283.
resultList
284.
=
285.
286.
287.
288.
289.
entityManager.createQuery(query,
290.
Member.class)
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
.setMaxResults(3).getResultList();
337.
338.
339.
} 12년 12월
7일 금요일
340.
1.
341.
JPQL(HQL) •장점
342.
:
343.
SQL
344.
QUERY와
345.
비슷해서
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
금방
358.
익숙해짐 •단점
359.
:
360.
type-safe
361.
아님
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
동적쿼리
373.
생성이
374.
어려움 12년 12월 7일
금요일
375.
2.
376.
Criteria
377.
API
378.
@Test
379.
public
380.
void
381.
jpaCriteriaQuery()
382.
{
383.
384.
385.
386.
CriteriaBuilder
387.
cb
388.
=
389.
entityManager.getCriteriaBuilder();
390.
391.
CriteriaQueryMember
392.
cq
393.
=
394.
cb.createQuery(Member.class);
395.
396.
RootMember
397.
root
398.
=
399.
cq.from(Member.class);
400.
401.
402.
403.
PathInteger
404.
age
405.
=
406.
root.get(age);
407.
408.
Predicate
409.
between
410.
=
411.
cb.between(age,
412.
20,40);
413.
414.
PathString
415.
path
416.
=
417.
root.get(name);
418.
419.
Predicate
420.
like
421.
=
422.
cb.like(path,
423.
김%);
424.
425.
426.
427.
CriteriaQueryMember
428.
query
429.
=
430.
cq.where(
431.
cb.and(between,
432.
like)
433.
);
434.
435.
query.orderBy(cb.desc(age));
436.
437.
438.
439.
ListMember
440.
resultList
441.
=
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
entityManager.createQuery(query).setMaxResults(3).getResultList();
457.
} 12년 12월
7일 금요일
458.
2.
459.
Criteria
460.
API 12년 12월 7일
금요일
461.
2.
462.
Criteria
463.
API
464.
select
465.
id,
466.
age,
467.
name
468.
from
469.
MEMBER
470.
471.
where
472.
age
473.
between
474.
20
475.
and
476.
40
477.
and
478.
name
479.
like
480.
'김%'
481.
order
482.
by
483.
age
484.
desc
485.
limit
486.
3 12년 12월 7일
금요일
487.
2.
488.
Criteria
489.
API •장점
490.
:
491.
동적쿼리
492.
생성이
493.
쉬움?? •단점 •1.
494.
type-safe
495.
아님 •2.
496.
복잡함 •3.
497.
알아야
498.
할게
499.
너무
500.
많음 •4.
501.
과거
502.
EJB공부
503.
할
504.
때가
505.
생각남... 12년 12월 7일
금요일
506.
3.
507.
MetaModel
508.
Criteria
509.
API (type-safe) •root.get(age)
510.
-
511.
root.get(Member_.age) •Criteria
512.
API
513.
+
514.
MetaModel •Criteria
515.
API와
516.
거의
517.
동일 •type-safe •복잡하긴
518.
마찬가지 12년 12월 7일
금요일
519.
이건
520.
아니야--; timowest 12년 12월 7일
금요일
521.
QueryDSL 12년 12월 7일
금요일
522.
QueryDSL
523.
분석 •Query
524.
:
525.
문의,
526.
조회,
527.
질문,
528.
? •Query
529.
!=
530.
SQL 12년 12월 7일
금요일
531.
QueryDSL
532.
분석 •Domain(도메인) •Specific(특화) •Language(언어) 12년 12월 7일
금요일
533.
DSL •도메인
534.
+
535.
특화
536.
+
537.
언어 •특정한
538.
도메인에
539.
초점을
540.
맞춘
541.
제한적인
542.
표현력을
543.
가진
544.
컴퓨터
545.
프로그래밍
546.
언어 •특징
547.
:
548.
단순,
549.
간결,
550.
유창 12년 12월 7일
금요일
551.
QueryDSL •조회
552.
+
553.
도메인
554.
+
555.
특화
556.
+
557.
언어 •조회에
558.
특화된
559.
프로그래밍
560.
언어 12년 12월 7일
금요일
561.
[Persistence] JPA,
562.
JDO,
563.
SQL,
564.
JAVA
565.
Collections,
566.
RDF,
567.
Lucene,
568.
Hibernate
569.
Search,
570.
Mongo
571.
Db QueryDSL
572.
API 데이터
573.
조회
574.
기능
575.
추상화 12년 12월 7일
금요일
576.
QueryDSL? •type-safe •조회에
577.
특화된
578.
프로그래밍
579.
언어 •단순,
580.
간결,
581.
유창 •다양한
582.
저장소
583.
조회
584.
기능
585.
통합 12년 12월 7일
금요일
586.
QueryDSL? •JPA,
587.
JDO,
588.
SQL
589.
같은
590.
Backends를
591.
위해
592.
type-safe
593.
SQL을
594.
만드는
595.
프레임워크 12년 12월 7일
금요일
596.
Type-safe Query
597.
Type
598.
생성 Member java Member table Member
... QMEMBER .java 코드 생성기 생성 12년 12월 7일 금요일
599.
코드생성기 •APT
600.
:
601.
Annotation
602.
Processing
603.
Tool •@Deprecated •@Override •@SuppressWarning •@Entity •Table
604.
Meta
605.
:
606.
Querydsl-maven-plugin 12년 12월 7일
금요일
607.
QueryDSL-JPA 12년 12월 7일
금요일
608.
Querydsl-JPA •Querydsl은
609.
JPQL(HQL)을
610.
typesafe
611.
하 게
612.
작성하기
613.
위해
614.
만들어짐 •너를
615.
위해
616.
만들었다! 12년 12월 7일
금요일
617.
질문
618.
:
619.
사람을
620.
찾아보자 •20~40살 •성
621.
=
622.
김씨 •나이
623.
많은
624.
순서 •3명을
625.
출력하라. 12년 12월 7일
금요일
626.
회원
627.
Table
628.
629.
630.
631.
create
632.
table
633.
Member
634.
(
635.
636.
637.
638.
639.
640.
641.
642.
id
643.
bigint
644.
auto
645.
primary
646.
key,
647.
648.
649.
650.
651.
652.
653.
654.
age
655.
integer
656.
not
657.
null,
658.
659.
660.
661.
662.
663.
664.
665.
name
666.
varchar(255)
667.
668.
669.
670.
) 12년 12월 7일
금요일
671.
회원 @Entity public
672.
class
673.
Member
674.
{
675.
@Id
676.
@GeneratedValue
677.
private
678.
Long
679.
id;
680.
private
681.
String
682.
name;
683.
private
684.
int
685.
age; ... } 12년 12월 7일
금요일
686.
QueryDSL-JPA Member.java @Entity QMember .java APT 생성 12년 12월 7일
금요일
687.
@Generated(com.mysema.query.codegen.EntitySerializer) public
688.
class
689.
QMember
690.
extends
691.
EntityPathBaseMember
692.
{
693.
694.
695.
696.
public
697.
final
698.
NumberPathLong
699.
id
700.
=
701.
createNumber(id,
702.
Long.class);
703.
704.
705.
706.
public
707.
final
708.
NumberPathInteger
709.
age
710.
=
711.
createNumber(age,
712.
Integer.class);
713.
714.
715.
716.
public
717.
final
718.
StringPath
719.
name
720.
=
721.
createString(name);
722.
723.
724.
725.
public
726.
static
727.
final
728.
QMember
729.
member
730.
=
731.
new
732.
QMember(member); ... } 자동생성된
733.
회원Query 12년 12월 7일
금요일
734.
QMember
735.
m
736.
=
737.
QMember.member query.from(m) .where(
738.
739.
740.
741.
m.age.between(20,40),
742.
743.
744.
745.
m.name.like(김%) ) .orderBy(m.age.desc()) .limit(3) .list(m); Querydsl-JPA 12년 12월 7일
금요일
746.
747.
JPAQuery
748.
query
749.
=
750.
new
751.
JPAQuery
752.
(entityManager);
753.
754.
755.
756.
757.
758.
QMember
759.
m
760.
=
761.
QMember.member;
762.
763.
764.
765.
ListMember
766.
list
767.
=
768.
query.from(m).where(
769.
770.
771.
772.
m.age.between(20,
773.
40).and(m.name.like(김%))
774.
775.
)
776.
777.
.orderBy(m.age.desc()).limit(3)
778.
779.
.list(m); Querydsl-JPA 12년 12월
7일 금요일
780.
생성된
781.
쿼리
782.
select
783.
id,
784.
age,
785.
name
786.
from
787.
MEMBER
788.
where
789.
age
790.
between
791.
20
792.
and
793.
40
794.
795.
and
796.
name
797.
like
798.
'김%'
799.
order
800.
by
801.
age
802.
desc
803.
limit
804.
3 12년 12월 7일
금요일
805.
작동
806.
방식 SQLJPQLQUERYDSL 생성 생성 12년 12월
7일 금요일
807.
Querydsl-JPA •장점 •type-safe •단순함 •쉬움 •EJB-Spring
808.
정도의
809.
차이? •단점 •APT를
810.
설정해야함 12년 12월 7일
금요일
811.
기능
812.
살펴보기 QueryDSL-JPA 12년 12월 7일
금요일
813.
구성 Query ex)
814.
from,
815.
where,
816.
join Path ex)
817.
QMember,
818.
QMember.name Expression ex)
819.
name.eq,
820.
name.gt 12년 12월 7일
금요일
821.
기능
822.
살펴보기 •from •innerJoin,
823.
join,
824.
leftJoin,
825.
fullJoin,
826.
on •where
827.
(and,
828.
or,
829.
allOf,
830.
anyOf) •groupBy •having •orderBy
831.
(desc,
832.
asc) •limit,
833.
offset,
834.
restrict(limit
835.
+
836.
offset)
837.
(Paging) 12년 12월 7일
금요일
838.
기능
839.
살펴보기 •list •listResults
840.
(list
841.
+
842.
Paging
843.
Info(totalCount)) •iterate •count •singleResult,
844.
uniqueResult 12년 12월 7일
금요일
845.
단순
846.
쿼리
847.
848.
JPAQuery
849.
query
850.
=
851.
new
852.
JPAQuery(entityManager);
853.
854.
855.
856.
QMember
857.
m
858.
=
859.
QMember.member;
860.
861.
862.
863.
ListMember
864.
results
865.
=
866.
query.from(m)
867.
868.
869.
870.
.where(m.name.startsWith(김).and(m.age.between(20,
871.
40)))
872.
873.
874.
875.
.list(m); 12년 12월
7일 금요일
876.
동적
877.
쿼리
878.
879.
String
880.
firstName
881.
=
882.
김;
883.
int
884.
min=20,max=40;
885.
886.
887.
888.
889.
890.
BooleanBuilder
891.
builder
892.
=
893.
new
894.
BooleanBuilder();
895.
896.
if
897.
(StringUtils.hasText(str))
898.
899.
900.
builder.and(m.name.startsWith(firstName));
901.
902.
903.
904.
if
905.
(min
906.
!=
907.
0
908.
909.
max
910.
!=
911.
0)
912.
913.
914.
builder.and(m.age.between(min,
915.
max));
916.
917.
918.
919.
ListMember
920.
results
921.
=
922.
query.from(m).where(builder).list(m); 12년 12월 7일
금요일
923.
조인
924.
쿼리
925.
926.
QMember
927.
m
928.
=
929.
QMember.member;
930.
931.
QMemberCard
932.
mc
933.
=
934.
QMemberCard.memberCard;
935.
936.
937.
938.
ListMember
939.
list
940.
=
941.
942.
943.
944.
945.
query.from(m).join(m.memberCards,
946.
mc)
947.
948.
949.
950.
.list(m); 12년 12월
7일 금요일
951.
조인
952.
쿼리
953.
+
954.
fetch
955.
956.
QCard
957.
c
958.
=
959.
QCard.card;
960.
961.
QMember
962.
m
963.
=
964.
QMember.member;
965.
966.
QMemberCard
967.
mc
968.
=
969.
QMemberCard.memberCard;
970.
971.
972.
973.
ListMember
974.
list
975.
=
976.
977.
978.
979.
980.
query.from(m)
981.
982.
983.
984.
.join(m.memberCards,
985.
mc).fetch()
986.
987.
988.
989.
.join(mc.card,
990.
c).fetch()
991.
992.
993.
994.
.list(m);
995.
996.
997.
998.
for
999.
(Member
1000.
member
1001.
:
1002.
list)
1003.
{
1004.
1005.
1006.
1007.
out.println(member.getMemberCards().get(0).getCard().getName());
1008.
1009.
1010.
1011.
1012.
1013.
1014.
1015.
1016.
1017.
} 12년 12월 7일
금요일
1018.
서브
1019.
쿼리 query.from(m).where(
1020.
1021.
m.in(
1022.
1023.
1024.
1025.
1026.
1027.
1028.
1029.
1030.
1031.
new
1032.
JPASubQuery().from(m)
1033.
1034.
1035.
1036.
1037.
1038.
1039.
1040.
1041.
1042.
1043.
1044.
1045.
1046.
1047.
1048.
1049.
1050.
1051.
1052.
1053.
1054.
1055.
1056.
1057.
1058.
1059.
1060.
1061.
1062.
1063.
1064.
1065.
1066.
1067.
1068.
1069.
1070.
1071.
1072.
1073.
1074.
.where(m.age.between(20,
1075.
40)).list(m))
1076.
1077.
).list(m); 12년 12월 7일
금요일
1078.
DTO
1079.
1080.
QMember
1081.
$member
1082.
=
1083.
QMember.member;
1084.
1085.
QMemberCard
1086.
$memberCard
1087.
=
1088.
QMemberCard.memberCard;
1089.
1090.
QCard
1091.
$card
1092.
=
1093.
QCard.card;
1094.
1095.
1096.
1097.
ListMemberDTO
1098.
list
1099.
=
1100.
query.from($member)
1101.
1102.
1103.
.join($member.memberCards,
1104.
$memberCard)
1105.
1106.
1107.
.join($memberCard.card,
1108.
$card)
1109.
1110.
.list(Projections.bean(MemberDTO.class, ,$member.id ,$member.name ,$member.age ,$card.name.as(cardName) )); public
1111.
class
1112.
MemberDTO
1113.
{
1114.
Long
1115.
id,
1116.
String
1117.
name,
1118.
int
1119.
age,
1120.
String
1121.
cardName
1122.
} 12년 12월 7일
금요일
1123.
DTO+@QueryProjection
1124.
1125.
QMember
1126.
$member
1127.
=
1128.
QMember.member;
1129.
1130.
QMemberCard
1131.
$memberCard
1132.
=
1133.
QMemberCard.memberCard;
1134.
1135.
QCard
1136.
$card
1137.
=
1138.
QCard.card;
1139.
1140.
1141.
1142.
ListMemberDTO
1143.
list
1144.
=
1145.
query.from($member)
1146.
1147.
1148.
.join($member.memberCards,
1149.
$memberCard)
1150.
1151.
1152.
.join($memberCard.card,
1153.
$card)
1154.
1155.
1156.
1157.
1158.
1159.
1160.
.list(new
1161.
QMemberDTO($member.id,
1162.
$member.name
1163.
,$member.age
1164.
1165.
1166.
1167.
1168.
1169.
1170.
1171.
1172.
1173.
1174.
1175.
1176.
1177.
1178.
1179.
1180.
1181.
1182.
1183.
1184.
1185.
1186.
1187.
1188.
1189.
1190.
1191.
1192.
1193.
1194.
1195.
1196.
1197.
1198.
1199.
1200.
1201.
1202.
1203.
1204.
1205.
1206.
1207.
1208.
1209.
1210.
1211.
1212.
1213.
1214.
1215.
1216.
1217.
1218.
1219.
,$card.name)); @QueryProjection public
1220.
MemberDTO(Long
1221.
id,
1222.
String
1223.
name,
1224.
int
1225.
age,
1226.
String
1227.
cardName) 12년 12월 7일
금요일
1228.
@QueryDelegate public
1229.
class
1230.
MemberExpression
1231.
{
1232.
@QueryDelegate(Member.class)
1233.
public
1234.
static
1235.
BooleanExpression
1236.
isAdult(QMember
1237.
$){
1238.
1239.
return
1240.
$.age.gt(20);
1241.
}
1242.
@QueryDelegate(Member.class)
1243.
public
1244.
static
1245.
BooleanExpression
1246.
isVip(QMember
1247.
$){
1248.
1249.
return
1250.
$.age.gt(50);
1251.
} }
1252.
1253.
QMember
1254.
$m
1255.
=
1256.
QMember.member; query.from(m) .where(m.isAdult()) .list(m);
1257.
1258.
12년 12월 7일
금요일
1259.
페이징,
1260.
정렬
1261.
1262.
SearchResultsMember
1263.
listResults
1264.
=
1265.
query.from(m) .offset(0).limit(10) .orderBy(m.age.desc()) .listResults(m);
1266.
1267.
System.out.println(total
1268.
count=
1269.
1270.
+
1271.
listResults.getTotal());
1272.
1273.
ListMember
1274.
results
1275.
=
1276.
listResults.getResults(); 12년 12월 7일
금요일
1277.
Spring
1278.
Data
1279.
JPA +
1280.
Querydsl 12년 12월 7일
금요일
1281.
Spring
1282.
Data
1283.
목적 •다양한
1284.
Data
1285.
Access를
1286.
스프링과
1287.
통합 •다양한
1288.
Data
1289.
Access를
1290.
쉽게
1291.
개발하도록
1292.
도움 •기타
1293.
등등... 12년 12월 7일
금요일
1294.
[Data
1295.
Access
1296.
Layer] JPA JDBC
1297.
Extension Apache
1298.
Hadoop GemFire,
1299.
Redis,
1300.
MongoDB
1301.
... Spring
1302.
Data Spring
1303.
Data
1304.
지원 12년 12월 7일
금요일
1305.
Spring
1306.
Data
1307.
JPA
1308.
간략 •JPA기반
1309.
Data
1310.
Access
1311.
Layer
1312.
개발을
1313.
단순 화함 12년 12월 7일
금요일
1314.
Repository •인터페이스
1315.
선언
1316.
만으로
1317.
EntityRepository 완성
1318.
(Generic) •구현
1319.
클래스는
1320.
런타임에
1321.
자동으로
1322.
생성됨
1323.
interface
1324.
MemberRepository
1325.
extends
1326.
1327.
1328.
1329.
1330.
1331.
1332.
1333.
1334.
1335.
1336.
1337.
1338.
1339.
1340.
1341.
1342.
1343.
1344.
1345.
1346.
1347.
1348.
Download now