6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Spring Boot】SpringDataJpaは便利だけど使えるJPQLの機能がはっきりしない。…ので、整理しました。

Last updated at Posted at 2019-03-30

Spring Boot/Spring Data JPAで使用できるJPQLの機能を整理してみました。
主にこちらの記事を参考にさせていただきました。有難うございました。
Spring Data JPAによるデータアクセス徹底入門 #jsug

■一般的なJPQLではEntityManagerを使います。

JPQL_Original_Use.java
//JPQL オリジナルの使用方法
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.TypedQuery;

EntityManagerFactory emf;
EntityManager em;
em = emf.createEntityManager();

TypedQuery<Product> query = em.createQuery(
"SELECT p FROM Product p WHERE p.id <= :maxId ORDER BY p.id", Product.class);
query.setParameter("maxId", 5);
List<Product> productList = query.getResultList();

■Spring Data JPAでは支援機能のおかげでEntityManagerは不要です。
※JpaRepositoryを継承することで下記の支援機能が使用できます。
<1>JpaRepositoryに既に定義されているメソッド群がそのまま使用できます。
  findById(id), findAll(pageable), save(entity), delete(entity)等
<2>@Query,@Modifyingアノテーション
  ・Repositoryインターフェースにメソッドを作成。@Queryアノテーションを付加してJPQLを記述すれば、EntityManagerは不要です。
  ・nativeQuery=trueとすればネイティブSQLも書けます。
  ・@Queryで更新系クエリーを使う場合は、@Modifyingが必要です。
<3>命名規約に従ってメソッド名を記述すれば@QueryでJPQLを記述する必要はありません。
<4>Date and Time API (JSR 310)対応
  Jsr310JpaConverterクラス:LocalDateなどのAttributeConverterが提供されています。

<2>JPQL_SpringDataJPA_Use.java
@Query("SELECT p FROM Product p WHERE p.id <= :maxId ORDER BY p.id")
List<Product> findByMaxIdOrderById(@Param("maxId")Integer maxId)
<3>JPQL_AutoGenerated.java
// 命名規約に従ったメソッド名(@QueryでJPQLを記述する必要なし)
// Product.nameに引数の文字列が含まれているものを検索する。
List<Product> findByNameContaining(String keyword);

<3-補足> メソッド名に使えるキーワード例
And, Or, Between, LessThan, LessThanEqual, Like, StartWith, EndWith, Containing, OrderBy, ...
詳細はこちらを参照「Spring Data JPA - Reference Documentation/ 5.3.2. Query Creation」

■(参考)Spring Data JPA 公式ドキュメント
Spring Data JPA - Reference Documentation
■(参考)TERASOLUNA Server Framework for Java (5.x) Development Guideline
6.3. データベースアクセス(JPA編)

■(参考)JPA実装ライブラリ
Hibernate : Spring Data JPAは基本的にこれを使用。
※JPAの参照実装であるEclipseLinkではありません。
※ライブラリ "org.springframework.boot/spring-boot-starter-data-jpa"

__(参考)JPAのVersionとJSR(Java Specification Request)__
  1. JPA 2.0 (JSR 317) - This version was released in the last of 2009. Following are the important features of this version: -
    It supports validation
    It expands the functionality of object-relational mapping
    It shares the object of cache support

  2. JPA 2.1 (JSR 338) - The JPA 2.1 was released in 2013 with the following features: -
    It allows the fetching of objects
    It provides support for criteria update/delete
    It generates a schema

  3. JPA 2.2 (JSR 338) - The JPA 2.2 was released in 2017. Some of its important features are: -
    It supports Java 8 Date and Time
    It provides @Repeatable annotation that can be used when we want to apply the same annotations to a declaration or type use
    It allows JPA annotation to be used in meta-annotations
    It provides an ability to stream a query result

6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?