メニュー

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