JAP @Whereで共通のSelect検索条件を指定する

spring

Spring Dao JPAでWereに常に同じ条件を指定する方法を紹介します!

常に同じ条件を指定するというとちょっと説明としてはわかりにくいのでまずは補足していきますね。

[スポンサーリンク]

@Whereのつかいどころ

JPAのfindAll()メソッドってテーブル検索すると全データを取得してしまいますよね?

これって業務で使用する場合はテーブルに論理削除フラグを持たせることが多いので、実際は全件取得するような場面ってあまりないのかなと思います。

かといって毎回Whereに同じ条件を書くのもかっこ悪いので、そんな時は@Whereで最初から検索に含めたい条件をデフォルトとして持たせることができます。

具体的には「delete_flg=0」だけを検索対象にする、というような設定です。

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

今回JPAでselectするテーブルはこちら。

deleteが「0」のデータのみを抽出するロジックを作っていきます。

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

@Whereの使い方

エンティティクラスへ@Whereを追加することで、select文の条件に常に「delete = 0」が指定されることになります。

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.Where;

@Entity
@Table(name="sample")
@Where(clause = " delete = 0")
public class Sample {

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

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

    @Column(name="delete")
    private Integer delete;

    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;
    }
    public Integer getDelete() {
        return id;
    }

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

findAllで全件検索

こちらのようにJPAのDaoクラスのfindAllメソッドで全件検索しても、@Where(clause = " delete = 0")の条件が効いているので全件検索ではなく、deleteが0のデータのみが検索結果として却ってきます。

sampleDao.findAll();

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

上記のサンプルソースを動かすには、まずSpring Bootを使ってSpring Dao JPAを使うためのプロジェクトを作っていきましょう。

プロジェクトの作成方法ですが、コチラでSpring BootでMySQLに接続してJPAを使う方法を紹介しています。

こちらを参考に実際に動くプロジェクトをまずは用意していきましょう。

springとjavaのバージョン

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

さいごに

@Whereを使うことで共通的な条件を何度もSQLに書く必要がなくなってきますし、findAllメソッドを自分ごのみにカスタマイズすることもできます。意外と便利なわざですね。

それでは!