2009-11-01から1ヶ月間の記事一覧

オレオレ日付型をつくろう(Doma 0.9.10)

日付のAPIはJavaの中でもよく文句が言われるところですね。 独自のクラスを作るという解決策はありますが、O/Rマッパーによってはユーザー定義の型をDBにマッピングするのが大変だったりするので(Hibernateとか)それはそれで躊躇してしまうかもしれません…

UPDATE文に自動で更新タイムスタンプを含める方法(Doma 0.9.10で)

updateの度にプログラムでわざわざタイムスタンプを更新しなくても自動で設定したいという話です。更新タイムスタンプとかは、複数エンティティで共通でしょうから、共通用のクラスつくります。 @Entity public class Common { Timestamp updateTimestamp; }…

Domaの今後のロードマップ

1月に1.0.0 RC、2月に1.0.0 Finalを予定しています。 Doma本体への新機能追加は今のところ考えていなくて(あるとしたらSQL Server対応かな)、考えているのは、 エンティティ生成のツール Eclipseプラグインの機能強化(SQLファイル作成時にSQLの雛形はくと…

Doma 0.9.10の紹介

いくつかの機能についてはリリース前に紹介してきましたが、まだ紹介しきれていないものをいくつかピックアップ。 aptのエラーをよりわかりやすい場所に これまで、アノテーションの要素部分のエラーであっても、アノテーションが注釈されたクラスやメソッド…

JPetStore で DI を使わなかったわけ

今回作ったJPetStoreですが、S2Containerを使いHOT deployやトランザクション管理の恩恵を受けながらもDI(Dependency Injection)はほとんど使わない方針を採りました。今回使ったDIはActionにActionFormをDIするところだけです。 public class CartAction …

Doma 0.9.10 リリース

リリースしました。今回、JPetStoreのデモアプリを作りました。ただ、IEだとCSSのレイアウトが崩れるかも。。。 http://doma.sandbox.seasar.org/demoapps/jpetstore.html チュートリアルのドキュメントも作りました。 http://doma.sandbox.seasar.org/tutor…

SQLのコメント式のforループでhasNextをブロックコメントに。

id:newtaさんからアイデアもらってhasNextコメントはブロックコメントにしました。 JPetStoreのサンプルではこんなSQLファイルが登場します。 SELECT PRODUCTID, NAME, DESCN, CATEGORY FROM PRODUCT WHERE /*%if keywords.size() > 0 */ /*%for keyword : k…

レガシーなアプリとも連携しやすく

Connectionをコンストラクタで受け取れるようにしました(次のバージョンDoma 0.9.10から)。 Connection con = ... EmployeeDao dao = new EmployeeDaoImpl(con); List<Employee> list = dao.selectAll(); 昔、JDBCベタベタのアプリをS2Daoを使うように変えたことがあ</employee>…

SQLのログをわかりやすく

ログにSQLファイルのパスを含めるようにしました(次のバージョンDoma 0.9.10から)。SQLファイルから読まれたSQLの実行ログはこんな感じ。改行されていますが、一度のログ出力です。 INFO 2009-11-17 23:50:44,537 [main] sqlFilePath=[META-INF/org/seasar…

SQLのコメント式でforループをサポート!!

次のバージョンのDoma 0.9.10で入ります。SQLファイルをこんな感じで書けます。 select * from EMPLOYEE where /*%if names.size() > 0*/ /*%for name : names*/ EMPLOYEE_NAME like /*@startWith(name)*/'hoge'--hasNext " or " -- /*%end*/ /*%end*/ /*%fo…

エンティティにマッピングされない結果セットのカラムはエラーに

これも次の0.9.10から。たとえば、SQLファイル(selectAll.sql)がこうだとします。 select id, name, salary from EMPLOYEE order by EMPLOYEE_ID マッピングされるエンティティクラスがこうだとします。 @Entity public class Emp { @Id public Integer id; …

検索時に select count(*) を同時に実行する機能

次の0.9.10で入れようと思います。たとえば、SQLファイル(selectByDepartmentId.sql)にはこう書いておきます。 select * from EMPLOYEE where DEPARTMENT_ID = /*departmentId*/0 order by EMPLOYEE_ID JavaのコードではSelectOptionsのcount()を呼び出して…

Hibernate StaticMetamodel Generator Annotation Processor を動かす

Hibernate 3.5.0-Beta-2 がリリースだそうです。で、メタモデルを出力するaptの実装 Hibernate StaticMetamodel Generator Annotation Processor にも言及しています。さっそく試そうとしたのですが、Hibernate 3.5.0-Beta-2の配布ファイルには含まれていま…

Doma 0.9.9 リリース

リリースしました。 http://doma.sandbox.seasar.org/downloads.html0.9.8からの変更点は次のとおりです。 Bug [DOMA-42] - [Core] aptによるエンティティクラスのprivateフィールドの検証がエンティティごとに最初の1つしか実行されない問題に対応しました…

時刻のリセット対応

上とおんなじ感じで、日付やタイムスタンプの時刻部分をゼロにリセットする組み込み関数 @resetTimePart も作りました。 select * from employee where updateTimestamp < /* @resetTimePart(updateTimestamp) */'2001-01-01 00:00:00' バインドする値が「20…

Like検索対応できた

前方一致検索の場合は@startWithという組み込み関数を使います。SQLファイルにはこう記述しておきます。 select * from employee where name like /* @startWith(name) */'a%' 呼び出し側では、%の連結が不要です。ここでは「S」を渡しています。 EmployeeDa…