Doma 0.9.7の新機能紹介
今日リリースした、Doma 0.9.7の紹介です。
Eclipseプラグイン - Doma Tools
機能は少なめですが、便利な機能を提供しています。
一番便利なのは、SQLファイルを変更すると対応するDaoクラスが自動ビルドされる機能です。これまでは、SQLファイルを修正したら対応するDaoを明示的にビルドする必要がありました(aptがDaoクラスのビルドからでないと実行されないため)が、もう気にしなくて大丈夫。
Daoのメソッドと対応するSQLファイルの間はWindowsだと「Ctl + Alt + 0」で行ったり来たりできます。で、SQLファイルがなかったらウィザードが開いてSQLファイルを作れます。
注意点ですが、domaのjarはプラグインとは別途セットアップして使ってください。Daoクラスは@Daoが注釈されていないと、プラグインの機能が反応しないので気をつけてください。
将来的には、SQLファイルのウィザードによる自動生成時にその場でSQL(の雛形)も一緒に生成してしまおうと思います。
DIコンテナとの連携
Daoの実装クラスはaptにより自動生成されますが、任意のアノテーションをつけられるようにすることでDIコンテナと連携しやすくなりました。ドキュメントでは、google-guiceを使う場合の例を載せておきました。同様にして、Springを使う場合は@Repositoryや@AutowiredとかSeasarの場合は@Componentとかもつけられます。
Enum対応
@Entity public class Employee { JobType jobType; ... public enum JobType { SALESMAN, CLERK } }
@Dao(config = AppConfig.class) public interface EmployeeDao { List<Employee> selectByJobType(JobType jobType); List<JobType> selectAllJobType(); }
Enum.name()で返される文字列を利用して検索、更新できます。
@OriginalStatesの導入
変更されたプロパティだけをUPDATE文のSET句に含めるための仕組みです。@OriginalStatesが注釈されたフィールドには、Daoから検索した時点の情報が保存されます。もちろん、この値自体は永続化されません。
@Entity public class Employee { @Id Integer id; String name; Integer age; @OriginalStates Serializable originalStates; ... }
で、エンティティを普通に取得して普通に更新するだけ。
EmployeeDao dao = new EmployeeDaoImpl(); Employee employee =dao.selectById(1); emoloyee.setAge(employee.getAge() + 1); dao.update(employee);
UPDATE文では、AGEカラムだけがSET句に含まれます。注意点としては、自分でエンティティをnewした場合は、すべてのプロパティがSET句に含まれるということです。あと、GWTで使えないもちょっと残念。
でも、S2DaoのModifiedOnlyと違って、
- getter/setterなしでも使える
- コードをまちがえにくい
という点がポイントです。
@OriginalStatesはかんぜんにオプション機能なので、必要でなければ使わなくても大丈夫です。