S2HibernateDaoInterceptor

近々リリースしたいと思っております。


・save,update,delete,loadの自動処理?について
まぁ、Hibernateなので、自動は当たり前なのですが。。。
interfaceで、次のように記述するだけで、実装しなくてよいので、多少はコードが短くなります。


public void insert(Blog blog);
public void update(Blog blog)



アノテーション対応について
Daoアノテーションとして次の2つを考えています。
 ARGSアノテーション
 QUERYアノテーション


ARGSアノテーションは、S2Daoと同じでメソッドの引数名を渡すために検索系のメソッドで設定します。
QUERYアノテーションは、HQLを直接書きたいというときに設定します。


また、ARGSアノテーションで引数名で次の2つが予約語になっています。
 "FirstResult":検索結果の何レコード目から取得するか。
 "MaxResults":検索結果から、何件取得するか。


例として、次のページにあるウエブログでのサンプルを書いてみます。

Chapter 17. Example: Weblog Application
第 17 章 例: ウェブログアプリケーション


eg.Blogクラス用のDAOの例です。


package eg.s2hibernate;

import java.util.Calendar;
import java.util.List;

import eg.Blog;

public interface BlogDao {

public Class BEAN = Blog.class;

public Blog load(Long id);

public void insert(Blog blog);
public void update(Blog blog);

public String listAllBlogNamesAndItemCounts_ARGES = "MaxResults";
public String listAllBlogNamesAndItemCounts_QUERY =
"select blog.id, blog.name, count(blogItem) " +
"from Blog as blog " +
"left outer join blog.items as blogItem " +
"group by blog.name, blog.id " +
"order by max(blogItem.datetime)";
public List listAllBlogNamesAndItemCounts(int MaxResults);

public String getBlogAndAllItems_ARGES="blogid";
public String getBlogAndAllItems_QUERY=
"from Blog as blog " +
"left outer join fetch blog.items " +
"where blog.id = :blogid" ;
public Blog getBlogAndAllItems(Long blogid);

public String listBlogsAndRecentItems_ARGES="minDate";
public String listBlogsAndRecentItems_QUERY=
"from Blog as blog " +
"inner join blog.items as blogItem " +
"where blogItem.datetime > :minDate";
public List listBlogsAndRecentItems(Calendar minDate);

}


続いて、eg.BlogItemクラス用のDAOの例です。


package eg.s2hibernate;

import eg.BlogItem;

public interface BlogItemDao {

public Class BEAN = BlogItem.class;

public BlogItem load(Long id);
public void update(BlogItem blog);

}

Hibernateにはマッピングファイルがあるので、S2Hibernate版ではBeanアノテーションいらないかなぁ。。。