Daoはinterfaceのみ(実装クラスつくらない)という手法が広まりつつあるのか?

Generic RepositoryがTSSで紹介されていましたが、これもDao(Repository)をinterfaceにして、メソッドにアノテーションつけるタイプですね。

public interface UserRepository extends ReadWriteJpaRepository<User, Long> {

  @GenericQuery(query = "from User where username = ?")
  User getByUsername(String username);
}

こう書いて、AOPがかかったインスタンスをSpringから取得して使うらしい。@GenericQueryに書いているのはJPQL。SQLJPAのNative Queryとして)も書けます。


同じような手法はwideplayiBATIS 3も使っていますね。もちろん、S2DaoKuina-Daoも。

DomaもユーザーがつくるDaoはinterfaceだけという点で同じわけですが、実装クラスをコンパイル時に実際につくってしまうというとこがちがっています。