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 を使用する。