JPAの@Queryの基本的な使い方を解説します!

spring

Spring Dao JPAで@Queryを使って自前でネイティブクエリを発行する方法を解説していきます!

[スポンサーリンク]

Spring Dao JPAを使ったプロジェクトの作成

まずはSpring Bootを使ってSpring Dao JPAを使うためのプロジェクトを作っていきましょう。

コチラは以前紹介しましたSpring BootでMySQLに接続してJPAを使う方法です。
こちらを参考に実際に動くプロジェクトをまずは用意していきましょう。

今回使用するテーブル構成

今回JPAでselectするテーブルはこちら。
上記で紹介しました以前のブログでもこちらのテーブルを使っています。

mysql> desc sample;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
mysql> select * from sample;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | test_name |
+----+-----------+

エンティティクラス

テーブルのデータを格納するクラスです。

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="sample")
public class Sample {

    @Id
    @Column(name="id")
    private Integer id;

    @Column(name="name")
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Daoクラス

JpaRepositoryを継承したインターフェースで@Queryを使ってネイティブなSQLを書いていきます!

@Queryをつけたメソッドを呼び出すことで@Queryに書いているSQLが実行されます。

SQLの書き方なのですが、こちら書き方は実は色々な書き方ができます。もちろんパラメータを渡すこともできますが、それはまた別の記事で紹介していきます。(今回は@Queryを使ってSQLを実行するだけです!ごめんなさい!)

import org.springframework.data.jpa.repository.JpaRepository;

import jp.co.example.entity.Sample;

public interface SampleDao extends JpaRepository <Sample, Integer> {

    @Query("select s from Sample s where s.name like 'test%' ")
    public List<Sample> findName();
}

気をつけるポイント!

上記のSQLですが、よーく見てみて下さい。テーブル名やカラム名がエンティティクラスのクラス名とフィールド名になっていますね。

もしここを間違えて実際のテーブル名をセットしてしまうとテーブル名 is not mappedというエラーがでてきます。

Spring Bootの場合は起動もできない状態となりますのでテーブル名にはエンティティクラス名を使うように気をつけましょう。
(ただし特別なパラメータをつければ、テーブル名をつけることも可能です。)

springとjavaのバージョン

Spring Bootのバージョンは、1.5.2を使っています。
javaは、version 8です。

サンプルソース

上記のロジックを使ったサンプルプロジェクトをコチラのGitHubで公開しています。

さいごに

@Queryを使いこなせばちょっとしたSQLは実クラスを作ることなく簡単に実装できます。

この記事の本文中でも少し触れましたが@Queryの書き方って色々な書き方ができます。どのような書き方ができるかについてはコチラで紹介しています。

では今回は@Queryの基本的な使い方の紹介でした!

それでは!