S2RecordComparatorプロジェクトへようこそ。
S2RecordComparatorとは
レコードオブジェクト(ビーンやマップ等)を比較するComparatorインスタンスを簡単に生成する為のユーティリティーです。 必要な設定は、対象のビーンメタ情報と並び替え条件のみです。
使い方
Comparatorの定義
1つのインターフェースで複数のComparatorを定義することができます。
public interface EmpBeanComparators {
@RecordType(EmpBean.class)
@OrderBy("id , ename, hiredate, salary desc")
Comparator getEnameComparator();
@RecordType(EmpBean.class)
@OrderBy("hiredate desc nulls last")
Comparator getHiredateComparator();
// ジェネリックスでもレコードの設定ができます
@OrderBy("salary desc, ename asc nulls first")
Comparator<EmpBean> getSalaryComparator();
}
// ビーン
public class EmpBean implements Serializable {
private static final long serialVersionUID = -8718383275173771432L;
public String id;
public String ename;
public String hiredate;
public long salary;
}
diconの設定
アプリdiconファイルにs2comparator.diconをインクルードしておきます。
<components>
<include path="s2dao.dicon"/>
......
<include path="s2comparator.dicon"/>
<component ...
....
</components>
インターセプターを結び付けます。
<component class="hoge.goods.search.comparators.EmpBeanComparators">
<aspect pointcut="get.*Comparator">comparator.interceptor</aspect>
</component>
サービスで使う
public class HogeServiceImpl implements HogeService {
public EmpBeanComparators comparators;
...
public void execute() {
...
Comparator cmp = comparators.getHiredateComparator();
Collections.sort(list, cmp);
...
}
...
定義方法
1つのComparatorは、RecordTypeとOrderBy,2つのアノテーションで定義されます。
RecordType
ビーンのタイプを指定します。パラメーターは、java.lang.Classです。
ジェネリックスでも指定できます。両方指定されている場合は、RecordTypeアノテーションが優先になります。
OrderBy
並び替え条件を指定します。文法は、SQLの「ORDER BY」節と一緒です。 ヌルは通常一番大きい値として取り扱われますが、「NULLS FIRST(昇順)/FIRST(降順)」オプション付きの場合、一番小さい値として取り扱われます。
// 名前の降順、電話番号の昇順に並び替える
@OrderBy("name desc, phoneNum");
Comparator getHogeCmp();
// 部署名の昇順、部署名未設定のデータは最後で見たいなぁ
@OrderBy("deptName nulls last");
@RecordType(HogeDeptBean.class)
Comparator getDeptSort();
SVN リポジトリ
https://www.seasar.org/svn/sandbox/s2comparator/trunk/TO DO (2008/03/08 現在)
- Mapをビーンとして比較する。
- 特定の比較が必要なカラムにはカスタムComparator指定する。(例:半・全角カナの比較、Dateの年月のみ比較)
- Comparatorを直接継承したインターフェースも支援する。:InterType
