SlidePub
Home
Categories
Login
Register
Home
General
Querydsl
Querydsl
zipkyh
2,242 views
113 slides
Jul 15, 2015
Slide
1
of 121
Previous
Next
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
About This Presentation
2012 KSUG 세미나에서 발표한 Querydsl에 대한 내용입니다.
Size:
4.92 MB
Language:
en
Added:
Jul 15, 2015
Slides:
113 pages
Slide Content
Slide 1
QueryDSL
type-safeQuery
&?+?)v:?(?+?
12?1257i? i
Slide 2
&~*O
•&?)?
•JPAQuery
•QueryDSL?
•QueryDSL-JPA
•?$?'?+?'?
•SpringDataJPA+Querydsl
12?1257i? i
Slide 3
&?)?
12?1257i? i
Slide 4
??)"?'?+?
•h'?)?d*v]
•$a)h
•)h&S
•+b?(E_10')y...
12?1257i? i
Slide 5
?$?*v]
이정도는 발로
만들어 주지
12?1257i? i
Slide 6
*?&;*v]
Stringsql=
“select*frommember”+
“wherenamelike?”+
“andagebetween?and?”
12?1257i? i
Slide 7
*?+”)k(?&/
12?1257i? i
Slide 8
&?+?(?&/
12?1257i? i
Slide 9
+b?(?&/
12?1257i? i
Slide 10
&??&?'?
12?1257i? i
Slide 11
&;*?(?&/??
?%?&;](?(?
'&z'=%w$?'??+?(?!
12?1257i? i
Slide 12
&??
Stringsql=
“select*frommember”+
“wherenamelike?”+
“andagebetween?and?”
[+?*?&v]
“select*frommemberwherename
like?andagebetween?and?”
12?1257i? i
Slide 13
QUERY)c&?)?)|
•QUERY$?&?)v,Type-check':]$?
•(I+?+?'?)y?)?)w%Q(?'6,:)j':]
12?1257i? i
Slide 14
(?%?$?*?q2])?
•*?+”)k(?%?()?)V(?%?)
•%?+*)o(?%?($a'?(?%?)
12?1257i? i
Slide 15
%G&k)j?'??
)ySQL)W'g&;)w'?+??
)C+?*?%?&z)%G$?&}%A
(?),$?$?$?.
SELECTNAME,AGE..
12?1257i? i
Slide 16
SQL...
•&d(?SQL)hClass*i%?Type)h)r?Java*?
%w%?)w'?+?'?)r$?&v?
•type-safe
12?1257i? i
Slide 17
Type-safe
•*?+”)k(E(?%?*r*?]$?
•Code-assistantx100!!!
•CTRL+SPACE+.(DOT)
12?1257i? i
Slide 18
QueryDSL-SQL
•SQL)WJava%?type-safe+?qo&?+?'?
)r$?+?%?)o)4*?
12?1257i? i
Slide 19
QueryDSL-SQL
12?1257i? i
Slide 20
QueryDSL
•+?)?&d)??)VORM(E% ????
12?1257i? i
Slide 21
JPAQuery
javaORM
12?1257i? i
Slide 22
)?&?:'?%?)W*Y(?')v
•20~40'?
•'?=?(
•$a)h&e)V'?'?
•3&z)W*y%?+?%?.
12?1257i? i
Slide 23
,D)6
@Entity
publicclassMember{
@Id@GeneratedValue
privateLongid;
privateStringname;
privateintage;
...
}
12?1257i? i
Slide 24
,D)6Table
createtableMember(
idbigintautoprimarykey,
ageintegernotnull,
namevarchar(255)
)
12?1257i? i
Slide 25
JPA(?'?QUERY&?&?)V
*?q3])?
•1.JPQL(HQL)
•2.CriteriaAPI
•3.MetaModelCriteriaAPI(type-safe)
12?1257i? i
Slide 26
1.JPQL(HQL)
@Test
publicvoidjpaJpqlQuery(){
Stringquery=
"selectmfromMemberm"+
"wherem.agebetween20and40"+
"andm.namelike'?%'"+
"orderbym.agedesc";
List<Member>resultList=
entityManager.createQuery(query,Member.class)
.setMaxResults(3).getResultList();
}
12?1257i? i
Slide 27
1.JPQL(HQL)
•)b)|:SQLQUERY(?'Y(C+?'?
?&?)i'?+?)?
•$?)|:type-safe(?$?
%Q)x*?&;'?'?)h(?%?)0
12?1257i? i
Slide 28
2.CriteriaAPI
@Test
publicvoidjpaCriteriaQuery(){
CriteriaBuildercb=entityManager.getCriteriaBuilder();
CriteriaQuery<Member>cq=cb.createQuery(Member.class);
Root<Member>root=cq.from(Member.class);
Path<Integer>age=root.get("age");
Predicatebetween=cb.between(age,20,40);
Path<String>path=root.get("name");
Predicatelike=cb.like(path,"?%");
CriteriaQuery<Member>query=cq.where(cb.and(between,like));
query.orderBy(cb.desc(age));
List<Member>resultList=
entityManager.createQuery(query).setMaxResults(3).getResultList();
}
12?1257i? i
Slide 29
2.CriteriaAPI
12?1257i? i
Slide 30
2.CriteriaAPI
selectid,age,name
fromMEMBER
whereagebetween20and40andnamelike'?%'
orderbyagedesclimit3
12?1257i? i
Slide 31
2.CriteriaAPI
•)b)|:%Q)x*?&;'?'?)h(.)0??
•$?)|
•1.type-safe(?$?
•2.'!)~+?
•3.(?(?(?+?q$?&?&e)Y
•4.?bEJB?'6+?%x]'??$i...
12?1257i? i
Slide 32
3.MetaModelCriteriaAPI
(type-safe)
•root.get("age")->root.get(Member_.age)
•CriteriaAPI+MetaModel
•CriteriaAPI(?b)c%Q)k
•type-safe
•'!)~+??&b*Q])?
12?1257i? i
Slide 33
)hd(?$?(?--;
timowest
12?1257i? i
Slide 34
QueryDSL
12?1257i? i
Slide 35
QueryDSL''?
•Query:&?)c,)?,D,)?&?,?
•Query!=SQL
12?1257i? i
Slide 36
QueryDSL''?
•Domain(%G&k)j)
•Specific(+`,9)
•Language((?(?)
12?1257i? i
Slide 37
DSL
•%G&k)j++`,9+(?(?
•+`)+?%G&k)j(?*a)|)W&n*x)?+?)x)j
+?,$%?)W])?*?+?+?+?%??%?&?(?(?
•+`)?:$?'?,_~,)K*X
12?1257i? i
Slide 38
QueryDSL
•)?,D+%G&k)j++`,9+(?(?
•)?,D(?+`,9%;+?%??%?&?(?(?
12?1257i? i
Slide 39
[Persistence]
JPA,JDO,SQL,JAVACollections,
RDF,Lucene,HibernateSearch,
MongoDb
QueryDSLAPI
%)h+?)?,D?$?*v'?,9
12?1257i? i
Slide 40
QueryDSL?
•type-safe
•)?,D(?+`,9%;+?%??%?&?(?(?
•$?'?,_~,)K*X
•$?(?+?)w)b'?)?,D?$?+]+?
12?1257i? i
Slide 41
QueryDSL?
•JPA,JDO,SQLl)VBackends&R)C+?
type-safeSQL)W&d%w$?+?%?)o)4*?
12?1257i? i
Slide 42
Type-safe
QueryType'?'?
Member java
Member table
Member ...
QMEMBER
.java
*?%w
'?'??
'?'?
12?1257i? i
Slide 43
*?%w'?'??
•APT:AnnotationProcessingTool
•
@Deprecated
•
@Override
•
@SuppressWarning
•
@Entity
•TableMeta:Querydsl-maven-plugin
12?1257i? i
Slide 44
QueryDSL-JPA
12?1257i? i
Slide 45
Querydsl-JPA
•Querydsl)VJPQL(HQL))Wtypesafe+?
q)w'?+??)C+?&d%{(?)?
•$?&R)C+?&d%{(?$?!
12?1257i? i
Slide 46
)?&?:'?%?)W*Y(?')v
•20~40'?
•'?=?(
•$a)h&e)V'?'?
•3&z)W*y%?+?%?.
12?1257i? i
Slide 47
,D)6Table
createtableMember(
idbigintautoprimarykey,
ageintegernotnull,
namevarchar(255)
)
12?1257i? i
Slide 48
,D)6
@Entity
publicclassMember{
@Id@GeneratedValue
privateLongid;
privateStringname;
privateintage;
...
}
12?1257i? i
Slide 49
QueryDSL-JPA
Member.java
@Entity
QMember
.java
APT
'?'?
12?1257i? i
Slide 50
@Generated("com.mysema.query.codegen.EntitySerializer")
publicclassQMemberextendsEntityPathBase<Member>{
publicfinalNumberPath<Long>id=createNumber("id",Long.class);
publicfinalNumberPath<Integer>age=createNumber("age",Integer.class);
publicfinalStringPathname=createString("name");
publicstaticfinalQMembermember=newQMember("member");
...
}
)v%Q'?'?%;,D)6Query
12?1257i? i
Slide 51
QMemberm=QMember.member
query.from(m)
.where(
m.age.between(20,40),
m.name.like("?%")
)
.orderBy(m.age.desc())
.limit(3)
.list(m);
Querydsl-JPA
12?1257i? i
Slide 52
JPAQueryquery=newJPAQuery(entityManager);
QMemberm=QMember.member;
List<Member>list=query.from(m).where(
m.age.between(20,40).and(m.name.like("?%"))
)
.orderBy(m.age.desc()).limit(3)
.list(m);Querydsl-JPA
12?1257i? i
Slide 53
'?'?%;*?&;
selectid,age,name
fromMEMBER
whereagebetween20and40
andnamelike'?%'
orderbyagedesc
limit3
12?1257i? i
Slide 54
)w%Q&?(F
SQLJPQLQUERYDSL
'?'? '?'?
12?1257i? i
Slide 55
Querydsl-JPA
•)b)|
•type-safe
•$?'?+?
•(.)0
•EJB->Spring)%G)c*O)h?
•$?)|
•APT&R'?)+?(?+?
12?1257i? i
Slide 56
?$?'?+?'?
QueryDSL-JPA
12?1257i? i
Slide 57
?'?
Query
ex)from,where,join
Path
ex)QMember,QMember.name
Expression
ex)name.eq,name.gt
12?1257i? i
Slide 58
?$?'?+?'?
•
from
•
innerJoin,join,leftJoin,fullJoin,on
•
where(and,or,allOf,anyOf)
•
groupBy
•
having
•
orderBy(desc,asc)
•
limit,offset,restrict(limit+offset)(Paging)
12?1257i? i
Slide 59
?$?'?+?'?
•
list
•
listResults(list+PagingInfo(totalCount))
•
iterate
•
count
•
singleResult,uniqueResult
12?1257i? i
Slide 60
$?'?*?&;
JPAQueryquery=newJPAQuery(entityManager);
QMemberm=QMember.member;
List<Member>results=query.from(m)
.where(m.name.startsWith("?").and(m.age.between(20,40)))
.list(m);
12?1257i? i
Slide 61
%Q)x*?&;
StringfirstName="?";intmin=20,max=40;
BooleanBuilderbuilder=newBooleanBuilder();
if(StringUtils.hasText(str))
builder.and(m.name.startsWith(firstName));
if(min!=0&&max!=0)
builder.and(m.age.between(min,max));
List<Member>results=query.from(m).where(builder).list(m);
12?1257i? i
Slide 62
)?)j*?&;
QMemberm=QMember.member;
QMemberCardmc=QMemberCard.memberCard;
List<Member>list=
query.from(m).join(m.memberCards,mc)
.list(m);
12?1257i? i
Slide 63
)?)j*?&;+fetch
QCardc=QCard.card;
QMemberm=QMember.member;
QMemberCardmc=QMemberCard.memberCard;
List<Member>list=
query.from(m)
.join(m.memberCards,mc).fetch()
.join(mc.card,c).fetch()
.list(m);
for(Membermember:list){
out.println(member.getMemberCards().get(0).getCard().getName());
}
12?1257i? i
Slide 64
'?'R*?&;
query.from(m).where(
m.in(
newJPASubQuery().from(m)
.where(m.age.between(20,40)).list(m))
).list(m);
12?1257i? i
Slide 65
DTO
QMember$member=QMember.member;
QMemberCard$memberCard=QMemberCard.memberCard;
QCard$card=QCard.card;
List<MemberDTO>list=query.from($member)
.join($member.memberCards,$memberCard)
.join($memberCard.card,$card)
.list(Projections.bean(MemberDTO.class,
,$member.id
,$member.name
,$member.age
,$card.name.as("cardName")
));
publicclassMemberDTO{Longid,Stringname,intage,StringcardName}
12?1257i? i
Slide 66
DTO+@QueryProjection
QMember$member=QMember.member;
QMemberCard$memberCard=QMemberCard.memberCard;
QCard$card=QCard.card;
List<MemberDTO>list=query.from($member)
.join($member.memberCards,$memberCard)
.join($memberCard.card,$card)
.list(newQMemberDTO($member.id,$member.name,$member.age
,$card.name));
@QueryProjection
publicMemberDTO(Longid,Stringname,intage,StringcardName)
12?1257i? i
Slide 67
@QueryDelegate
publicclassMemberExpression{
@QueryDelegate(Member.class)
publicstaticBooleanExpressionisAdult(QMember$){
return$.age.gt(20);
}
@QueryDelegate(Member.class)
publicstaticBooleanExpressionisVip(QMember$){
return$.age.gt(50);
}
}
QMember$m=QMember.member;
query.from(m)
.where(m.isAdult())
.list(m);
12?1257i? i
Slide 68
+?)h)?,)%?
SearchResults<Member>listResults=
query.from(m)
.offset(0).limit(10)
.orderBy(m.age.desc())
.listResults(m);
System.out.println("totalcount="+listResults.getTotal());
List<Member>results=listResults.getResults();
12?1257i? i
Slide 69
SpringDataJPA
+Querydsl
12?1257i? i
Slide 70
SpringData&~)x
•$?(?+?DataAccess&R(<+?&a?+]+?
•$?(?+?DataAccess&R(3qo&?+?%G%?
%G)0
•?+*%a%a...
12?1257i? i
Slide 71
[DataAccessLayer]
JPA
JDBCExtension
ApacheHadoop
GemFire,Redis,MongoDB...
SpringData
SpringData)?)6
12?1257i? i
Slide 72
SpringDataJPA_%?
•JPA?&?DataAccessLayero&?)W$?'?
,9+?
12?1257i? i
Slide 73
Repository
•)j+?+?)h(<'?(?&d)T%?EntityRepository
(?'?(Generic)
•?,$*?%?(<$?%?+*)o(?)v%Q)T%?'?'?%=
interfaceMemberRepositoryextends
JpaRepository<Member,Long>{
}
12?1257i? i
Slide 74
interfaceMemberRepositoryextends
JpaRepository<Member,Long>{
}
'6&}Repository
•'6&}Interface
•%a%?,'?),'?)?
•)?,D,+?)h)?,)%?
•)h&}%yj)h?)?!
12?1257i? i
Slide 75
methodname*?&;'?'?
publicinterfaceMemberRepositoryextendsJpaRepository<Member,Long>{
publicList<Member>findByName(Stringname);
}
•&k'?%w)h&S&d)?(?)?&v$a&`)?(?(?'?...
•select*frommemberwhere
name=:name
12?1257i? i
Slide 76
SpringDataJPA
%)h+?)?,D?$?
•methodname*?&;'?'?
•Specfication(DDD)
•QueryDSL
•JPQL()hd+?(<)
12?1257i? i
Slide 77
methodname*?&;'?'?
List<Member>list=memberRepository
.findByNameStartingWithAndAgeBetweenOrderByAgeDesc("?",20,40);
publicinterfaceMemberRepository...{
publicList<Member>findByNameStartingWithAndAgeBetweenOrderByAgeDesc
(Stringstring,intmin,intmax);
}
12?1257i? i
Slide 78
methodname*?&;'?'?
•)b)|:'?'?(?'?])b(K+?,+?&;
•$?)|
•%Q)x*?&;X
•)?+?)h':]$?->&k'?%w]&?+?)?]
•h'?)?d)h&e)T&v$?&??(?)?
•~%?:_$?+?j(?&d(s)v
12?1257i? i
Slide 79
DDDSpecification
12?1257i? i
Slide 80
Specfication(DDD)
Specification<Member>firstNameLike=MemberSpecs.isFirstName("?");
Specification<Member>ageBetween=MemberSpecs.ageBetween(20,40);
Specifications<Member>specs=
Specifications.where(firstNameLike).and(ageBetween);
List<Member>list=memberRepository.findAll(specs);
12?1257i? i
Slide 81
publicstaticclassMemberSpecs{
publicstaticSpecification<Member>isFirstName(finalStringfirstName){
returnnewSpecification<Member>(){
@Override
publicPredicatetoPredicate(Root<Member>root,CriteriaQuery<?>query,
CriteriaBuildercb){
Path<String>namePath=root.get("name");
returncb.like(namePath,firstName+"%");
}
};
}
publicstaticSpecification<Member>ageBetween(finalintmin,finalintmax){
returnnewSpecification<Member>(){
@Override
publicPredicatetoPredicate(Root<Member>root,CriteriaQuery<?>query,
CriteriaBuildercb){
Path<Integer>age=root.get("age");
returncb.between(age,min,max);
}
};
}
}
12?1257i? i
Slide 82
Specfication(DDD)
•)b)|
•)d'?))]$?,)?+?]$?
•$?)|
•JPACriteriaAPI'?)),'!)~,(?%?)0
•type-safe(?$?(MetaModel'(?]$?)
•'!)~+?Specs..&?'$?&?$=)h*?'?,>
12?1257i? i
Slide 83
SpringData+QueryDSL
QMemberm=QMember.member;
Iterable<Member>results=memberRepository.findAll(
m.name.startsWith("?").and(m.age.between(20,40))
);
publicinterfaceMemberRepositoryextendsJpaRepository<Member,Long>,
QueryDslPredicateExecutor<Member>{}
12?1257i? i
Slide 84
SpringData+QueryDSL
•)b)|
•)d'?))]$?,)?+?]$?
•type-safe
•)hd(c(?+?!
12?1257i? i
Slide 85
)hb&v$w)b!
12?1257i? i
Slide 86
)?)j*?&;)?)?'$??
12?1257i? i
Slide 87
join)h+?)"+?!
QMemberm=QMember.member;
Iterable<Member>results=memberRepository.findAll(
m.name.startsWith("?").and(m.age.between(20,40))
);
)s???
)?)j)V(?%c(????
12?1257i? i
Slide 88
timowest
'!)~+?dJPAQueryinstance&R
)?)}'?))+?(?+?$?$?.
12?1257i? i
Slide 89
SpringData+Querydsl
+??
•Querydsl)c&}%y?$?)W(v'?(?$?.
•ex)join,fetch%aQuery?$?':]$?
•subQuery)%G$?]$?
•+?)h)?,Order](?*")h)??(?$?&S
12?1257i? i
Slide 90
•SpringData+?%?)?+~)c(?)|)V)?,D
•Querydsl%?)?,D?$?'(?
SpringData+Querydsl
)&;
12?1257i? i
Slide 91
SpringData+Querydsl
)&;
•$?'?+??)*:SpringData+Querydsl
•'!)~+??)*:Querydsl)?)}'?))
•SpringData(?'?Querydsl)c%)&e)V?
$?)W)?)6+??)C+?)x?$?%?)?
12?1257i? i
Slide 92
,0(E$a+?'?...
•QueryDSL)cServiceLayer*?+g$?
)?(?%G(?%;$?!%??'??+?(E&v...
•QueryDslRepositorySupport
12?1257i? i
Slide 93
,0(E$a+?'?...
•maven-apt-plugin(1.0.6)X
•apt-maven-plugin(1.0.6)O
12?1257i? i
Slide 94
QueryDSL~%?
•+?&?(c'&v%K(?(?'?(?)Y
•SpringData(?'?%G&??)r)Y
•d%Q)c*?+”)k(?%?
•d%Q)cctrl+space,Code-assistant
•&??]]$s)r)?&d*?&?+?](?)y(?))x
•)?)?'!)~+?j)V(a*?&;'?))
12?1257i? i
Slide 95
*T?)v&/
•QueryDSLhttp://www.querydsl.com/
•QueryDSLPPThttp://www.slideshare.net/timowestkamper
•SpringDataJPAhttp://www.springsource.org/spring-data/jpa
•BOOK'?+?'?(<https://github.com/SpringSource/spring-data-book
•)?(?,/$?'U%??,DSL'?&zhttp://aeternum.egloos.com/2962600
12?1257i? i
Slide 96
d'?+?$?$?.
12?1257i? i
Slide 97
*v]
Querydsl-Collections
Querydsl-SQL
12?1257i? i
Slide 98
Querydsl-
JavaCollections
12?1257i? i
Slide 99
)?&?
•'?%?)W*Y(?')v
•20~40'?)?'?)h?()j'?%?)W*Y?$a
)h]&e)V'?'?%%?3&z)W*y%?+?%?.
12?1257i? i
Slide 100
,D)6
publicclassMember{
privateStringname;
privateintage;
...
}
12?1257i? i
Slide 101
@Test
publicvoidjava(){
List<Member>members=createDatas();
List<Member>list=newArrayList<Member>();
for(Membermember:members){
if(member.getAge()>=20){
if(member.getAge()<=40){
if(member.getName().startsWith("?")){
list.add(member);
}
}
}
}
//$a)h'?)T%?)%?...--;(?)y?(?)?'?'?%?+?$?$?.
//3&z&d's$?j%G'?%?+?$?$?.
for(Membermember:list){
System.out.println(member.getName()+"/"+member.getAge());
}
}
12?1257i? i
Slide 102
QueryDSL-
Collections
Member
.java
QMember
.java
APT
'?'?
12?1257i? i
Slide 103
,D)6
@QueryEntity
publicclassMember{
privateStringname;
privateintage;
...
}
12?1257i? i
Slide 104
@Generated("com.mysema.query.codegen.EntitySerializer")
publicclassQMemberextendsEntityPathBase<Member>{
publicfinalStringPathname=createString("name");
publicfinalNumberPath<Integer>age=
createNumber("age",Integer.class);
publicstaticQMembermember=newQMember("member");
...
}
)v%Q'?'?%;,D)6Query
12?1257i? i
Slide 105
importstaticcom.mysema.query.collections.MiniApi.*;
@Test
publicvoidcollectionQuerydsl(){
List<Member>members=createDatas();
QMemberm=QMember.member;
List<Member>list=from(m,members).where(
m.age.between(20,40).and(m.name.like("?%"))
)
.orderBy(m.age.desc()).limit(3).list(m);
for(Membermember:list){
System.out.println(member.getName()+"/"+member.getAge());
}
}
12?1257i? i
Slide 106
JavaCollections~%?
•)?(?')p$?$?!
•+?)?&d...,$(I(?'?DB-SQL%?$w$r(?+?
$?)k
12?1257i? i
Slide 107
Querydsl-SQL
12?1257i? i
Slide 108
)?&?
•'?%?)W*Y(?')v
•20~40'?)?'?)h?()j'?%?)W*Y?$a
)h]&e)V'?'?%%?3&z)W*y%?+?%?.
12?1257i? i
Slide 109
,D)6
publicclassMember{
privateLongid;
privateStringname;
privateintage;
...
}
12?1257i? i
Slide 110
,D)6Table
createtableMember(
idbigintautoprimarykey,
ageintegernotnull,
namevarchar(255),
)
12?1257i? i
Slide 111
*?&;&d%{?
selectm.ID,m.AGE,m.NAME
fromMEMBERm
wherem.AGE
between20and40
andm.NAMElike'?%'
orderbym.AGEdesc
limit3
12?1257i? i
Slide 112
*?&;->DTO
)hd'?%?+?$*)"--;...
12?1257i? i
Slide 113
QueryDSL-SQL
Member
TABLE
QMember
.java
'?'?
querydsl-maven-plugin
12?1257i? i
Slide 114
@Generated("com.mysema.query.sql.codegen.MetaDataSerializer")
publicclassQMemberextends...RelationalPathBase<Member>{
publicstaticfinalQMembermember=newQMember("MEMBER");
publicfinalNumberPath<Long>id=createNumber("ID",Long.class);
publicfinalNumberPath<Integer>age=createNumber("AGE",Integer.class);
publicfinalStringPathname=createString("NAME");
...
}
)v%Q'?'?%;,D)6Query
12?1257i? i
Slide 115
@Test
publicvoidsqlQuerydsl()throwsException{
SQLQueryquery=createQuery();
QMemberm=QMember.member;
List<MemberDTO>list=query.from(m).where(
m.age.between(20,40).and(m.name.like("?%"))
)
.orderBy(m.age.desc()).limit(3)
.list(Projections.bean(MemberDTO.class,m.id,m.name,m.age);
for(MemberDTOmember:list){
System.out.println(member);
}
}
privateSQLQuerycreateQuery()throwsException{
Class.forName("net.sf.log4jdbc.DriverSpy");
Connectionconn=DriverManager.getConnection("jdbc:log4jdbc:hsqldb:hsql://localhost");
SQLTemplatesdialect=newHSQLDBTemplates();
SQLQueryquery=newSQLQueryImpl(conn,dialect);
returnquery;
}
12?1257i? i
Slide 116
)v%Q'?'?%;*?&;
selectm.ID,m.AGE,m.NAME
fromMEMBERm
wherem.AGE
between20and40
andm.NAMElike'?%'
orderbym.AGEdesc
limit3
12?1257i? i
Slide 117
Querydsl-SQL)??%)
•innerJoin,join,leftJoin,fullJoin
•groupBy
•having
•orderBy
•subquery
•insert,update,delete
12?1257i? i
Slide 118
Querydsl-SQL)??%)
QSurveysurvey=QSurvey.survey;
newSQLInsertClause(conn,dialect,survey)
.columns(survey.id,survey.name)
.values(3,"Hello").execute();
QSurveysurvey=QSurvey.survey;
newSQLUpdateClause(conn,dialect,survey)
.where(survey.name.eq("XXX"))
.set(survey.name,"S")
.execute();
QSurveysurvey=QSurvey.survey;
newSQLDelecteClause(conn,dialect,survey)
.where(survey.name.eq("XXX"))
.execute();
QCustomercustomer=QCustomer.customer;
QCompanycompany=QCompany.company;
query.from(customer)
.innerJoin(customer.company,company)
.list(customer.firstName,customer.lastName,
company.name);
12?1257i? i
Slide 119
DTO)v%Q'?'??$?
•(?'?&d+"&vDTO%G)v%Q'?'?]$?
•MEMBERTABLE->MEMBER.java
12?1257i? i
Slide 120
DTO)v%Q'?'??$?
+?)?&d...
•DTO(?(????$?&d%{(?)?)?(?)Y
•TABLE->DTO)v%Q'?'?)V1:1)j?)*&d
(v&d+?
•DTO&R'?)+?'?(?$?.
•Querydsl)VORM)h(?$?
12?1257i? i
Slide 121
Querydsl-SQL~%?
•)b)|:type-safe
•)?)c)|:FK&R&z,:+?q'?)+?(?+?$?.
12?1257i? i
Tags
jpa
querydsl
Categories
General
Download
Download Slideshow
Get the original presentation file
Quick Actions
Embed
Share
Save
Print
Full
Report
Statistics
Views
2,242
Slides
113
Favorites
38
Age
3796 days
Related Slideshows
22
Pray For The Peace Of Jerusalem and You Will Prosper
RodolfoMoralesMarcuc
33 views
26
Don_t_Waste_Your_Life_God.....powerpoint
chalobrido8
36 views
31
VILLASUR_FACTORS_TO_CONSIDER_IN_PLATING_SALAD_10-13.pdf
JaiJai148317
33 views
14
Fertility awareness methods for women in the society
Isaiah47
30 views
35
Chapter 5 Arithmetic Functions Computer Organisation and Architecture
RitikSharma297999
29 views
5
syakira bhasa inggris (1) (1).pptx.......
ourcommunity56
30 views
View More in This Category
Embed Slideshow
Dimensions
Width (px)
Height (px)
Start Page
Which slide to start from (1-113)
Options
Auto-play slides
Show controls
Embed Code
Copy Code
Share Slideshow
Share on Social Media
Share on Facebook
Share on Twitter
Share on LinkedIn
Share via Email
Or copy link
Copy
Report Content
Reason for reporting
*
Select a reason...
Inappropriate content
Copyright violation
Spam or misleading
Offensive or hateful
Privacy violation
Other
Slide number
Leave blank if it applies to the entire slideshow
Additional details
*
Help us understand the problem better