現在、
QueryDsl に
それなりの
書き
前提
使用した
QueryDsl
のVersion
4.1.4 です。<!-- QueryDsl 本体 --> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-core</artifactId> <version>4.1.4</version> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId> <version>4.1.4</version> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-sql</artifactId> <version>4.1.4</version> </dependency> <!-- アノテーションプロセッサー --> <plugin> <groupId>com.mysema.maven</groupId> <artifactId>apt-maven-plugin</artifactId> <version>1.1.3</version> <executions> <execution> <goals> <goal>process</goal> </goals> <configuration> <outputDirectory>target/generated-sources/java</outputDirectory> <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId> <version>4.1.4</version> </dependency> </dependencies> </plugin>
参考サイト Querydsl Reference Guide
LIKE 文
JPQL
SELECT festival FROM Festival festival WHERE festival.name LIKE ?1 ESCAPE '!'
Expressions
を使用する。 QFestival qFestival = QFestival.festival; JPAQueryFactory queryFactory = new JPAQueryFactory(em); List<Festival> results = queryFactory .selectFrom(qFestival) .where(qFestival.name.like(Expressions.asString(name).concat("%"))).fetch();
startsWith
メソッドを使用する。 JPAQueryFactory queryFactory = new JPAQueryFactory(em); List<Festival> results = queryFactory.selectFrom(qFestival) .where(qFestival.name.startsWith(name)).fetch();
MAX 関数
JPQL
SELECT max(festival.updateDate) FROM Festival festival
max()
メソッドで指定 QFestival qFestival = QFestival.festival; JPAQueryFactory queryFactory = new JPAQueryFactory(em); return queryFactory .select(qFestival.updateDate.max()) .from(qFestival).fetchOne();
COUNT 関数
JPQL
SELECT count(festival) FROM Festival festival
count()
メソッドで指定 QFestival qFestival = QFestival.festival; JPAQueryFactory queryFactory = new JPAQueryFactory(em); return queryFactory .select(qFestival.count()) .from(qFestival) .fetchOne();
DISTINCT 関数 と ORDER BY
JPQL
SELECT DISTINCT heldYear1.heldYear FROM HeldYear heldYear1 INNER JOIN Festival festival ON heldYear1.id = festival.heldYearId.id ORDER BY heldYear1.heldYear DESC
selectDistinct()
メソッド、orderBy()
メソッドでdescを 指定 QHeldYear qHeldYear = QHeldYear.heldYear1; QFestival qFestival = QFestival.festival; JPAQueryFactory queryFactory = new JPAQueryFactory(em); return queryFactory.selectDistinct(qHeldYear.heldYear) .from(qHeldYear) .innerJoin(qFestival).on(qHeldYear.id.eq(qFestival.heldYearId.id)) .orderBy(qHeldYear.heldYear.desc()).fetch();
DELETE文
JQPL
DELETE FROM lastfm_search_result WHERE (search_query_id = ?)
delete()
メソッドで指定 QLastfmSearchResult qResult = QLastfmSearchResult.lastfmSearchResult; JPAQueryFactory queryFactory = new JPAQueryFactory(em); long updateCount = queryFactory .delete(qResult) .where(qResult.searchQueryId.eq(searchQuery)).execute();
INNER JOIN
JQPL
SELECT lastfmSearchResult FROM LastfmSearchResult lastfmSearchResult INNER JOIN SearchQuery searchQuery ON lastfmSearchResult.searchQueryId = searchQuery INNER JOIN FATagSQueryRelation fATagSQueryRelation ON fATagSQueryRelation.festivalArtistTagId = ?1
innerJoin()
メソッドを使う QLastfmSearchResult qResult = QLastfmSearchResult.lastfmSearchResult; QSearchQuery qSearch = QSearchQuery.searchQuery; QFATagSQueryRelation qRelation = QFATagSQueryRelation.fATagSQueryRelation; JPAQueryFactory qFactory = new JPAQueryFactory(em); return qFactory .selectFrom(qResult) .innerJoin(qSearch).on(qResult.searchQueryId.eq(qSearch)) .innerJoin(qRelation).on(qRelation.festivalArtistTagId.eq(fATag)) .fetch();
もっと
以上です。
コメント