ひがやすを技術ブログ

電通国際情報サービスのプログラマ

S2Dao

コミッタ追加

あがたさんをS2Daoの新しいコミッタにお迎えしました。S2Pagerなどが本体の中に取り込まれることになります。

1.0.26リリース

TABLEアノテーションで指定したテーブル以外でも_付きのカラム名で自動マッピングするようにしました。

1.0.25リリース

カラム名に_がある場合でも自動的にマッピングできるようにしました。S2.2.6が必要です。

1.0.24リリース

SQL文中に引数や引数のプロパティを文字列として直接埋め込む機能を追加しました。/*$引数名*/のように引数名の前に$をつけます。 この機能を待ち望んでいた方も多いのではないでしょうか。

1.0.23リリース

SQL文の中に;があった場合の扱いに不具合があったのを修正しました。

1.0.22リリース

戻り値がNumber型の場合に適切に型変換するようにしました。

CallableStatementFactory not work with SQLServer

S2Daoに追加したCallableStatementFactoryですが、SQLServerではうまく機能しないようです。SQLServerのJDBC Driverは、CallableStatementだとストアドプロシージャと思ってしまうようです。orz It is CallableStatementFactory which is added to S2Dao, bu…

JSR175 is applied to S2Dao

誣告の誹りを止め給えより.JSR175(A Metadata Facility for the JavaTM Programming Language)をJ2SE SDK 1.3/1.4でも使えるようする...のかな?#backportってどうゆう意味? backport175を使ってS2DaoでJSR175を使えるようにしたいと思います。これで、Se…

Boolean correspondence

現状のS2JDBCでは、boolean型を無条件にint型に変換していましたが、PostgreSQL等でエラーになってしまうため、元の仕様に戻します。そのかわり、CallableStatementのWrapperを提供することで、booleanをintに変更する処理を行わせたいと思います。 In curre…

1:Nマッピング

太一さんのところで、1:Nマッピングの仕様の検討が始まってます。要望のある方は、どんどんコメントして、自分達が使いやすい仕様にしましょう。 仕様の検討段階から、自分の考えを(blogで)気軽に言えるのも、The Seasar Projectの良いところの1つだと思って…

ロードマップ

前から約束している1:N対応ですが、2月末をめどに対応したいと思います。 1:N以外は、今のところ未定です。

from 2ch

org.seasar.dao.impl.DaoMetaDataImpl#createResultSetHandler method.getReturnType().isAssignableFrom(List.class) ↓ List.class.isAssignableFrom(method.getReturnType()) じゃないか?その通りですね。修正します。

1.0.16リリース

http://sourceforge.jp/projects/seasar/files/?release_id=12612#12612 修正点 IDアノテーションを使った場合に、プライマリーキーが、カラム名ではなくプロパティ名になってしまう不具合を修正しました。

NO_PERSISTENT_COLUMNSアノテーション

S2DaoにNO_PERSISTENT_COLUMNSアノテーションとPERSISTENT_COLUMNSアノテーションを追加します。これは、Daoに対するアノテーションです。 例えば、 update_NO_PERSISTENT_COLUMNS = "hoge"; とすると永続化対象のカラムのうち、hogeが対象からはずされます…

1.0.14リリース

http://sourceforge.jp/projects/seasar/files/?release_id=12562#12562 読み込み専用のBeanでもプライマリーキーが必須になっていたのを、更新/削除するときのみ必須になるように修正しました。 余分なS2.0.22が含まれていたので削除しました。

ID機能

S2DaoではHibernateのようなID機能を今後サポートしていく予定です。 プロパティ名_ID = "generatorClassName, parameteName1=value1, ..."; まず、最初にサポートするのは、generator=identityです。 id_ID="identity"; データベースによって割り当てられた…

練習問題

S2Daoに四択の練習問題をつけました。 S2Daoのドキュメントからたどれますが、直接なら http://homepage3.nifty.com/seasar/s2DaoExercise.html 今後、S2Unit、S2Containerと続きます。

1.0.9リリース

修正点 オラクルでQUERYアノテーションを使ったときに" AND "が抜ける点を修正しました。 BEANとDTOが同一のクラスでCOLUMNアノテーションを指定したときに例外が発生する点を修正しました。 次のバージョンでS2Strutsを抜くよ。

S2Dao1.0.8リリース

リリースメモ 手動で動的にSQL文を組み立てられるようにするためにEntityManagerを追加しました。 DTOでも自動で動的なSELECT文を組み立てられるようにしました。 DTOによる自動で動的なSELECT文作成対応により、検索条件入力画面などは、ほとんど画面以外の…

EntityManager

EntityManagerを使ったQueryの実行EntityManagerを使って、自動的に生成されるSELECT分にWHERE句やORDER BY句を追加できます。書き方は、QUERYアノテーションと同様です。主に、動的にQueryを組み立てたいときに使います。EntityManagerを使うためには、org.…

INでプリミティブ型の配列

IN /*deptnoArray*/(10, 20)のようなINを使ったバインド変数コメントで、バインド変数がプリミティブ型の配列の場合でも処理できるように修正しました。

S2DaoV1.0.6リリース

修正点 BETWEENのANDが消えてしまうバグを修正 今後は、開発が進まなくなるようなバグは、できるだけその日のうちに修正版を出すようにしたいと思います。

1:Nマッピング, join句

次のバージョンの話ではないのですが、1:Nマッピングを追加します。lazy-loadingではなく、一回のフェッチで取得します。lazy-loadingしたければ、個別にDaoを呼び出せば良いと考えています。 public class Department { public static final String employe…

Singletonの怖さ

Singletonはテストと相性が悪い。なぜなら、テストメソッド間で状態を維持してしまうからだ。このようにいってきた私自身が、Singletonにはまってしまいました。 無念だ。心より恥じる。 S2Daoのテストをしているときに、ロールバックが効かない場合がありま…

QUERYアノテーション

CRITERIAアノテーションは、QUERYアノテーションという言い方に変わります。ORDER BYもQUERYアノテーションに記述することができます。そのため、ORDERアノテーションがサポート外になるので、注意してください。

OracleでSELECT文を自動生成したときのバグ

s2dao1.0.4を入れてみる。 すると、selectのsql自動更新処理のとこで例外発生。 一個前のバージョンと比較してみると、 org.seasar.dao.dbms.Oracleの48行目のwhereBuf.setLength(whereBuf.length() - 5); がループの外にでている。 この箇所を修正したら正…

新機能

:変数とか$変数とかは、ややこしいかなと思い始めてきました。 JDBC標準の?だけでも良いかも、するとCriteriaアノテーションを使うときは、ARGSアノテーションが不要になります。 public static final String getEmployees_CRITERIA = "BETWEEN sal ? AND ?"…

Criteriaアノテーション2

LIKEなどで%等を使いたい場合には、:変数名(バインド変数)ではなく、 $変数名を使って、文字列としてCriteriaに埋め込みます。 public static String getEmployee_ARGS = "ename"; public static String getEmployee_CRITERIA = "BETWEEN ename LIKE '%$enam…

Criteriaアノテーション

定型的なSQL文とちょっとだけ違う場合に、SQL文全体を記述するのは面倒です。そのようなときに役に立つのが、Criteriaアノテーションです。 例えば、引数で指定した上限と下限の間の給料をもらっている従業員の一覧を取得する場合、次のようにします。 publi…

:変数名と$変数名の違い

:変数名は、バインド変数になります。 例えば、ename = :enameと記述すると、 SQLは、ename = ?になります。 $変数名は、SQLに直接文字列を埋め込みます。 例えば、ename LIKE '%$ename%'、enameの値がhogeだった場合、 SQLは、ename LIKE '%hoge%'になりま…