流れるようなインターフェースをViewのように再利用

SELECT文の骨格は同じなんだけど、where句があったりなかったり、Pagingがあったりなかったりするなど、微妙に違うSQL文は良くでてきます。
S2JDBCを使うと、SELECT文の骨格を返すメソッドを用意することで、それをViewのように再利用することができます。例えば、次のような感じ。


protected AutoSelect createView() {
return select().leftOuterJoin(dept())
.leftOuterJoin(address());
}

public List findAll() {
return createView().getResultList();
}

public Emp findById(Integer id) {
return createView().id(id).getSingleResult();
}

public List findByLowSalaryAndHighSalary(Integer lowSalary, Integer highSalary) {
return createView().where(ge(salary(), lowSalary), le(salary(), highSalary))
.getResultList();
}

where句の一部を再利用する場合でも、同じような感じで、whereオブジェクトを返すメソッドを用意すればOKです。
タイプセーフな流れるようなインターフェースを使うことで、SQL文の重複部分もリファクタリングによって取り除くことができ、メンテナンス性が高まります。


SQLファイルを利用する場合は、Viewを使うことで同じような効果を得ることができます。