Spring Data JPA で遊んでみる 〜その1〜

beta版の時に少し遊んだのですが、気がつけば 1.0.1.RELEASE なんてのが出ててたので改めて触って見ました。

Spring Data は Springのアプリケーションで簡単にPersistanceの機能を作るためのアレで、Spring Data JPAはそのJPAバージョンです。この他にもNoSQLの様々なプロダクトがあります。ちまたで噂の Java 9 のクラウド対応とかこういう感じのものになるのかなぁとかも妄想したり。あと、Spring Roo 1.2でもこのSpring Data JPAとの連携が新しく追加されています。

Spring Data JPA はインタフェースでリポジトリを定義します。メソッドの命名規則があったり、インタフェースで定義するあたりはs2daoに非常に似ています。

エンティティクラスは当前ですが、JPAで定義します。

@Entity
public class Emp {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
    // getter setter ...
}

これに対するリポジトリのインタフェースはこんなん。

public interface EmpRepository extends JpaRepository<Emp, Long> {
    Emp findByName(String name);
}

継承しているJpaRepositoryはJPA操作の基本となるCRUDのメソッドが定義されています。それに拡張する形でインタフェースにメソッドを定義します。ここれはnameをキーにした検索メソッドを定義しています。メソッドの命名規則についてはまた今度書きます。

あとはこのリポジトリをBeanとして定義します。

 <jpa:repositories base-package="org.yamkazu.springdata" />

これでおしまい。

使うときはBeanを取得して、リポジトリを操作できます。

    @Inject
    EmpRepository repository;

    @Test
    public void はじめてのSpringDataJpa() {
        Emp emp = new Emp();
        emp.setName("HomuHomu");
        repository.save(emp);

        Emp e = repository.findByName("HomuHomu");
        assertThat(e, is(notNullValue()));
        assertThat(e.getName(), is(equalTo("HomuHomu")));
    }

このへんにコードをおいておきます。
https://github.com/yamkazu/springdata-jpa-example/tree/quickstart