2009-01-01から1年間の記事一覧

0.9.11のSNAPSHOT版をリリース

正式なものではないですが、 [DOMA-86]のバグが深刻だったのでリリースします。 ダウンロードはこちらからどうぞ。 http://maven.seasar.org/maven2-snapshot/org/seasar/doma/doma/0.9.11-SNAPSHOT/doma-0.9.11-20091224.152616-2.jar 0.9.10からの変更点は…

JDBC、S2JDBC、S2Dao、JPA(Hibernate)、Domaのパフォーマンス比較

データベースにH2を使ってCRUDのパフォーマンス比較をしてみました。それぞれ3回実行して真ん中の値を使っています。コードや使用しているライブラリはリポジトリにあります。 https://www.seasar.org/svn/doma/trunk/or-mapper-benchmark/ 10000件SELECT 52…

Enum Propertyパターン

メッセージ管理などでプロパティファイルを使っていて、Javaのコード上でプロパティファイルのkeyをタイプミスしてしまったりkeyがどこで使われているか検索するのが面倒くさかったりしませんか?そんなときはEnum Propertyパターンが使えます。 プロパティ…

Domaのjarサイズが意外と大きい件

http://d.hatena.ne.jp/shootaroo/20091203コード量も多いといえば多くなってきましたが(たぶん28000行くらい)、細かいクラスをたくさんつくっているのがサイズを大きくしている要因なのかも?。apt部分を抜いたjarを正式に提供しようかなぁと考えたのです…

H2 Databaseをサポート

需要がありそうなので次のバージョン(0.9.11)からH2 Databaseをサポートしようと思います(H2用のDialectを用意します)。 サンプルプログラムなどではデータをSQLとして保持できるHSQLDBが便利ですが、管理ツールの使い勝手とかを考えたりするとH2のほうが…

SQLのログ機能を強化

次のバージョンで、SQLの種別(SELECTかINSERTかとか)を簡単に判別してログ出力可能にします。対応しようと思ったきっかけは、seasar-userのML。http://ml.seasar.org/archives/seasar-user/2009-December/018946.html DBFluteのログ出力でSelect文以外のSQ…

オレオレ日付型をつくろう(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…

Like検索対応

DBFluteの機能を見ていて思ったのですが、Like検索とのマッピングを柔軟にするのはgoodなアイデアですね。 http://d.hatena.ne.jp/jflute/20091026/1256820207 いまだとできないけど、Domaではたとえば前方一致検索の場合はこうしようかなと考えました。Dao…

残タスク

あとは何があるかな? Doma SQLファイル中のSELECT句をパースしてEntityとちゃんとマッピングされているかaptでチェック ページング用SQLを発行したら同じWHEREでcount()を自動で取得するオプション SQL Server/DB2対応? 検索系SQLの自動生成はやらないつも…

Doma 0.9.8 リリース

Doma 0.9.8 をリリースしました。今回はドキュメントに、S2Daoと何が同じで何がちがうのかといった大まかな説明を追加しました。 http://doma.sandbox.seasar.org/overview.html 0.9.7からの変更点は次のとおりです。 Bug [DOMA-36] - [Core] 列挙型Annotati…

Doma 0.9.7の新機能紹介

今日リリースした、Doma 0.9.7の紹介です。 Eclipseプラグイン - Doma Tools http://doma.sandbox.seasar.org/extension/doma_tools.html 機能は少なめですが、便利な機能を提供しています。一番便利なのは、SQLファイルを変更すると対応するDaoクラスが自動…

Doma 0.9.7 をリリース

リリースしました。 DomaはS2DaoやS2JDBCを参考にして作られた新しいタイプのO/Rマッパーです。(どちらかというとS2Daoに近いです。)今回から開発を支援するEclipseプラグインを提供します。ぜひお試しください。 0.9.6からの変更点は次のとおりです。 Bug…

Guiceとの連携案

Guiceを使った場合に、DomaのConfigクラスのインスタンスをDaoImplにどうインジェクトするのがベターか?という話です。 昨日のConfigAdapterはDomaが提供するという前提で話をすすめたいと思います。 案1 明示的なコンストラクタインジェクション Daoの設定…

DIコンテナ対応(Configのインジェクションに対応する)案

@Daoのconfig要素に指定するクラスでDIコンテナからlookupしてもらえればいいかと思っていましたが、いいアイデアを思いついたので対応する方向で考えたいと思います。 DIコンテナ使わない場合 いままでどおり、@Daoのconfig要素にアプリで作成したクラスを…

DomaがサポートするEclipseのバージョンは3.5以上で

Eclipse 3.4.2のaptの実装には、明らかな不具合があることがわかりました。それは、メソッドのパラメータの部分にエラーのマークを出せないことです。たとえば、次のようなDaoメソッドがあるとします。 @Select List<Employee> selectById(int id); Domaは、パラメータ</employee>…