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

Hudoson上でDBを利用する結合テスト環境つくりました

これまで、Google Codeを使っていたんですが、Seasarプロジェクトに移行しました。 https://www.seasar.org/svn/sandbox/doma/ そして、さっそくHudsonを使わせてもらいました。 https://www.seasar.org/hudson/job/doma/ https://www.seasar.org/hudson/job…

SQLなどのログまわり

SQLなどのログをアプリ側で取得したいという話をよく聞くので、必要そうなログは特定のインタフェースを実装したクラスへ全部送るようにしてみました。こんなインタフェースです。 public interface JdbcLogger { void logMethodEntering(String callerClass…

aptでバインド変数コメントをバリデーション

Domaではsql上のバインド変数は、コメントでDaoのメソッドのパラメータ名とマッピングします。 たとえばこんなかんじ。idがマッピングされます。 SQLファイル select * from employee where id = /*:id*/99 Daoのメソッド @Select Employee selectById(Id id…

今後の予定

メインの機能はほぼできたので、7月中に最初のリリースをしようと思います。とりあえず、Oracle、PostgreSQL、MySQL、HSQLDBの4つをサポートします。あとは必要に応じて。もし現時点のDomaに興味があれば、 http://domaframework.googlecode.com/svn/trunk/ …

1つのDaoで複数のエンティティを扱ったりジェネリックなDaoを利用したり

S2DaoはDaoとBean(エンティティ)の関係は基本的に1対1ですが、Domaでは1対nもokにしてます。3つのテーブルしか扱わないとかだと、1つのDaoで十分かも。 @Dao(config = AppConfig.class) public interface AppDao { @insert int insert(Employee employee);…

ファンクションやプロシージャの実行

いま実装中です。Daoの定義はこうなる予定。 @Dao(config = MyConfig.class) public interface EmployeeDao { @Function Salary getTotalSalary(@In Id deptId, @Out Salary average, @ResultSet List<Employee> employees); @Procedure(name = "aaa_proc") void fillT</employee>…

エンティティのイテレーション

エンティティを1件ずつイテレートする機能を実装しました。IterationCallbackはS2JDBCを参考に同じインタフェースにしました。 Daoの定義はこんなん。@Selectのiteration要素をtrueにします。 @Dao(config = MyConfig.class) public interface EmployeeDao e…

検索系メソッドのページングとか悲観的ロックの指定はパラメータで

select時のページングとか悲観的ロックはsqlファイルで用意された元のsqlを書き換えて実行します。呼び出し時に動的に変更したいだろうからこの情報はSelectOptionsというパラメータで渡します。Daoはこんなん。 @Dao(config = MyConfig.class) public inter…

更新系メソッドのオプション指定はアノテーションで

前回のエントリでパラメータで渡す例を載せましたが、アノテーションで指定しまったほうがわかりやすいと思い直してこうしました。 @Dao(config = MyConfig.class) public interface EmployeeDao { @Delete(queryTimeout = 10, ignoresVersion = true) int d…

オプションの指定

S2Daoだとタイムアウトなどのオプションをクエリごとに指定したりできない(diconで一律設定はできます)んですが、DomaではDaoのメソッドでオプションを渡せるようにしてみました。 @Dao(config = MyConfig.class) public interface EmployeeDao { @Delete …

IDの自動採番

S2JDBCを参考にIDの自動採番機能もつけました。DBのauto incrementを使う場合はこんなん。 @Entity public interface Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) IntegerDomain employee_id(); ... } シーケンスを使う場合はこ…

EntityListener

タイムスタンプを設定するコードを一箇所に集中させたいという話をよく聞くのでEntityListenerを用意してみました。@Entityにリスナークラスを設定します。 @Entity(listener = EmpListener.class) public interface Emp { ... TimestampDomain insertTimest…

Domaのポリシー

Domaがどんなものかちょっと説明してみます。SQLの生成とJavaとのマッピングに関するポリシーはこんなです。 検索系のSQLはSQLファイルにマッピング、自動生成機能は用意しない。動的なSQLはSQLコメントで実現。 更新系のSQLはデフォルトで自動生成、SQLファ…

SQLファイルとかバインド変数コメントをつかった動的なSQLとか

example.EmpDaoにこんなメソッドがあるとします。 @Select List<Emp> selectByName(StringDomain name); このとき対応するSQLファイルは、META-INF/example/EmpDao/selectByName.sql になります。同じDaoのSQLファイルだけが同じディレクトリに並ぶことになるので</emp>…

aptで生成したクラスのためのファクトリは使わないことに

Doma(aptを使ったDaoフレームワーク)ができてきたので簡単に紹介。 これまで、DaoやEntityはファクトリを使って生成していましたが、フレームワークでは提供しないことにしました。aptで作られたクラスをnewして使うほうが便利だからです。suffix(_)つき…