続・S2JDBC の弱点を補完するS2AbstractService
エンティティの結合を検索時に指定することがほとんどなので
findByIdやfindAllなんかは実運用では出番があまりないかもです。
AbstractService に次のようなメソッドを用意すれば、結合も汎用的に扱うことができます。
AbstractService.java
public class AbstractService<ENTITY> extends S2AbstractService<ENTITY> { public List<ENTITY> findAll(String leftOuterJoin, String orderBy) { return select().leftOuterJoin(leftOuterJoin) .orderBy(orderBy).getResultList(); } public ENTITY findById(Integer id, String leftOuterJoin) { return select().leftOuterJoin(leftOuterJoin) .id(id).getSingleResult(); } }
呼び出し側:
Employee emp = employeeService.findById(3, "department"); List<Employee> empItems = employeeService.findAll("department", "name");
追記:
以下のような書き方もあります。
Employee emp = employeeService.select() .leftOuterJoin("department").id(3).getSingleResult(); List<Employee> empItems = employeeService.select() .leftOuterJoin("department").orderBy("name").getResultList();
ちなみに、EmployeeServiceの中身は空っぽです。
EmployeeService.java
public class EmployeeService extends AbstractService<Employee> { }
追記:
selectメソッドは、S2AbstractService にて次のように定義されています。
public AutoSelect<T> select() { return jdbcManager.from(entityClass); }