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"); ComparatorgetHogeCmp(); // 部署名の昇順、部署名未設定のデータは最後で見たいなぁ @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