2006年04月07日 [長年日記]
_ [Java][Seasar] S2Daoで検索処理を書く。
S2Daoで検索処理を書くときは、QUERYアノテーションかSQLアノテーションを指定しよう。
public interface HogeDao { public Class BEAN = Hoge.class; public static final String getHoge_ARGS = "id"; public Hoge getHoge(String id); }
として、
Hoge hoge = hogeDao.getHoge("1");
としても、「select * from hoge where id = '1'」相当のSQLを発行してくれるようだが、
Hoge hoge = hogeDao.getHoge(null);
とすると、「select * fro hoge」相当のSQLが発行されてしまう。 これだと、全件取得になった上で最初の一件を返すため、引数にnullが指定されてしまったことに気付き辛く、バグの発生する原因となってしまう。
これを回避するには、きちんとQUERYアノテーションやSQLアノテーションを指定することだ。
public interface HogeDao { public Class BEAN = Hoge.class; public static final String getHoge_QUERY = "id = ?"; public static final String getHoge_ARGS = "id"; //引数1つだから、これなくてもいいね。 public Hoge getHoge(String id); }
これで、
Hoge hoge = hogeDao.getHoge(null);
としても、「select * from Hoge where id = null」なSQLを発行するようになる。 これなら検索結果がゼロ件になるのでhogeがnullとなってくれる。