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。SQL(JPAのNative Queryとして)も書けます。
同じような手法はwideplayやiBATIS 3も使っていますね。もちろん、S2DaoやKuina-Daoも。
DomaもユーザーがつくるDaoはinterfaceだけという点で同じわけですが、実装クラスをコンパイル時に実際につくってしまうというとこがちがっています。