JavaPersistenceQueryLanguage(JPQL)とは?実際に使ってみよう!
  • facebookページ
  • twitterページ
  • 2021.02.25

    JavaPersistenceQueryLanguage(JPQL)とは?実際に使ってみよう!

    JavaPersistenceQueryLanguage(JPQL)は、JavaPersistenceAPI(JPA)で使用するクエリ言語です。

    本記事では、JPQLとは何かといった概要的な情報から初心者向けに基本となる設定方法をサンプルコードを掲載しながらご紹介していきます。

    JavaPersistenceQueryLanguageとは?


    JavaPersistenceQueryLanuage(JPQL)は、JPAでエンティティからデータを取得する際に利用されるクエリ言語です。

    SQL文と記述方法は似ていますが、JPQLの場合は取得対象をデータベースのテーブルではなく、エンティティを指定することになります。

    WikipediaのJPAのページを確認してみると下記のように説明されています。

    Java Persistence Query Language (JPQL) は、関係データベースに格納されたエンティティに対するクエリに使用される。文法的にはSQLに似ているが、データベースの表を直接操作するのではなく、エンティティオブジェクトを操作する。
    引用元: Wikipedia

    JPQLの基本構文

    JPQLはSQLの記述方法と似ていると記載しましたが、実際にどのように記述することになるのか確認しておきましょう。

    JPQLで全てのフィールドを取得する

    SQLの書き方と異なる点に全カラム(全フィールド)取得の方法が挙げられます。

    SQLでは「*」を記述することで、対象行に存在するカラムのデータを全て取得出来ましたが、JPQLではエイリアスを指定する必要があります。

    この場合Personというエンティティのエイリアスが「A」となり、SELECT句にエイリアス名を指定することで全てのフィールドの値を取得することが出来ます。

    JPQLをJavaプログラムで使ってみる


    JPQLの概要と基本的な構文を説明しましたが、JPQLをJavaプログラムから利用するための設定方法についても確認しておく必要あります。

    順を追って説明していきます。

    今回は各種開発環境の設定が完了して、JPAプロジェクトを作成できた段階を想定してご紹介します。

    ポテパンダの一言メモ

    サンプルではJPAプロジェクトの設定にEclipseのHibernate Toolsというプラグインを利用しています。

    今回利用するデータベースには「fruits」というテーブル名で下記のデータを用意しておきました。

    エンティティクラス生成

    まずは今回利用する「fruits」テーブルのエンティティクラスを作成していきます。


    プロジェクトを右クリックから「JPAツール」→「テーブルからエンティティを生成」を選択します。


    接続しているデータベースのテーブル一覧が表示されますので、エンティティを作成したいクラスを選択し、チェックを入れて「次へ」をクリックします。


    キージェネレーターには「identity」を選択しておきました。


    確認画面が表示されるので完了しておきます。

    するとsrcフォルダの配下にパッケージが作成され、下記のようなエンティティクラスが生成されます。

    DBへの接続情報を追記

    JPAのプロジェクト作成時に生成されたMETA-INFフォルダ配下の「persistence.xml」を確認してみると現時点でこのような記述になっているかと思います。

    ここに接続したDB情報を追記します。

    これでデータベースとの接続が出来る状態となりました。

    プログラムからアクセスしてみよう

    では上記で作成したエンティティクラスに、JavaのMainクラスからアクセスしてデータを取得してみましょう。

    実行結果

    Fuitsエンティティに定義した「findAll」のJPQL文が実行され、テーブルに格納された全データをエンティティクラスへのアクセスで取得出来ていることが分かります。

    サンプルコード解説

    JPQLの関連した記述部分を確認しておきましょう。

    エンティティクラス

    エンティティクラスの17行目に記載された下記のコードがデータ取得時のJPQL文を定義している場所です。

    呼び出し元クラス

    MainクラスからJPQL文を呼び出しているのが下記の記述です。

    createNamedQueryでエンティティクラスに設定したJPQL文の名前「findAll」を実行するように指定しています。

    例えばこの記述を次のように変更すれば、「id」が「1」のデータだけを取得することが出来るようになります。

    エンティティクラス

    呼び出し元クラス

    さいごに:JavaPersistenceQueryLanguageでエンティティでのクエリ操作を試してみよう


    本記事では、JavaPersistenceQueryLanguage(JPQL)の概要と実際に利用するまでの設定方法を含めてサンプルコードを掲載しながらご紹介してきました。

    今回の内容は基本的な設定方法をご紹介したに過ぎず、JPQLの記述方法は多岐に渡ります。

    設定さえ出来てしまえば、あとは各種JPQL文を試していくだけですので、各種JPQLの記述方法を試しながらエンティティでのクエリ操作にチャレンジしてみてください。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE