ObjectAPI形式で戻り値を自分でハンドリングする その2

JDBIを普通に使ってると、DaoとModelが別ファイルになっちゃうのですが、一応こうやれば同じクラスで実装できます。でもあまりよろしく無さそうですね。

Table002.java
public class Table002
{
	private int id;
	private String name;

	public Table002(){}

	public Table002(int id, String name)
	{
		this.id = id;
		this.name = name;
	}

	public static class Table002Mapper implements  ResultSetMapper<Table002>
	{
		@Override
		public Table002 map(int index, ResultSet r, StatementContext ctx) throws SQLException
		{
		    return new Table002(r.getInt("id"), r.getString("name"));
		}
	}

	@SqlQuery("select * from table001")
	@RegisterMapper(Table002Mapper.class)
	public List<Table002> findAll(){return null;}

	public int getId()
	{
		return id;
	}

	public void setId(int id)
	{
		this.id = id;
	}

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}
}
Sample011.java
public static void main(String[] args) {
	String url = "jdbc:postgresql://192.168.52.128/jdbi";
	DBI dbi = new DBI(url, "jdbi_user", "jdbi_pass");

	Table002 table002 = dbi.onDemand(Table002.class);
	List<Table002> rows = table002.findAll();
	System.out.println("rows count = " + rows.size());
	for( Table002 row : rows )
	{
		System.out.println("id = " + row.getId() + ", name = " + row.getName());
	}
}

Table002.findAll() が全てなのですが、普通の実体クラスなので実装を書かないとコンパイルエラーになります。とは言え、このメソッドのコードは全く実行されませんので、return null; とだけ書いてます。
ちなみに、Table002 を abstract にすると、今度は new できないので、やっぱり上手くいきません。やっぱり素直にDaoとModelを分割するのが良さそうです。