続・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);
    }