ダブルスタンダードで!

iBATIS 3.0 が出たらどうしようと困惑したが、2と3のダブルスタンダードで行こう!と言うと、
頭の硬い人は、反対すると思う。
ダブルスタンダード
つまり、SqlMapClient と SqlSession の両方を使う
SQLMap.xml を書いて patameterMap 等の細かいことをするのは、
SqlMapClient を使い、
アノテーションで、SQL1文で簡潔にしたいときは、
SqlSession#getMapper(Class) を使う。

iBATIS3 によるコンフィギュレーション、Configuration.xml と、
iBATIS2 によるコンフィギュレーション、SqlMapConfig.xml
各々のマップファイルは用意する。
前提として、Configuration.xml も、SqlMapConfig.xml ともに、
JNDIコンテキスト DataSource を参照するようにして、
DB接続情報は一元管理する。

ということで、iBATIS3.0 の @Select @Insert @Update @Delete の簡単なサンプル

アノテーションSQL記述を、interfaceで記述する

public interface UserMapper{
   @Select("SELECT * FROM tbluserinfo WHERE userid = #{userid}")
   public long getUser(int userid);

   @Insert("INSERT INTO tbluserinfo (userid,name,note,phone) VALUES(#{userid},#{name},#{phone})")
   public int insertUser(UserInfo userInfo);

   @Select("SELECT LAST_INSERT_ID() AS VALUE")
   public long getId();

   @Update("UPDATE tbluserinfo SET phone = #{phone} WHERE id = #{id}")
   public int updateUser(UserInfo userInfo);

   @Delete("DELETE FROM tbluserinfo WHERE userid = #{userid}")
   public int delete(int userid);

   @Select("SELECT * FROM tbluserinfo WHERE phone IS NULL")
   public List<UserInfo> getNophoneList();

実行は、、、

SqlSession sqlsession = sqlSessionFactory.openSession();
UserInfoMapper umapper = sqlsession.getMapper(UserInfoMapper.class);

UserInfoMapper 各メソッドを実行
Insert Update delete は、
SqlSession#commit()
SqlSession#rollback() を忘れずに!


iBATIS3.0 になって良くなってるのは、上記、List<T> を返すSELECT実行で、
キャストに対する未検査型の警告がなくなり、
この 簡単なinterface class の記述で問題なく自動マッピングされることである。

1行のSQLで済むものは、このSqlSession を使用し、
実際のプロジェクトでよく出現する長いSQL、細かいパラメータマップや動的SQLは、
XMLで管理して、SqlMapClient を使用する。