blancoDb Enterprise Edition 1.3.0 (Beta1)動きました。
MySQL4.0.26 + WindowsXP SP2 + JSE5(1.5.0_04)でAntタスクによる実行で動作しました。ソースが自動生成される様をみて、Railsと似てるなぁと思ってしまいました。http://d.hatena.ne.jp/nowokay/20051114で、Javaにはウィザードが必要だとおっしゃってますが、blanco Frameworkもそういう流れの一つになるような気がします。
さて、blancoDbですが、早速オレオレベンチにかけてみたところ、二つほど問題がありました。
オレオレベンチ: http://taka-2.com/jclass/ORMapper/index.html
問題その1: 自動生成ソースの一部がコンパイルエラーとなる
Compiling 46 source files to C:\work\project\OR\build\classes C:\work\project\OR\src\blancodb\query\SimpleCustomerSelectAllIterator.java:183: シンボルを見つけられません。 シンボル: メソッド setID(int) 場所 : blancodb.row.SimpleCustomerSelectAllRow の クラス result.setID(fResultSet.getInt(1)); C:\work\project\OR\src\blancodb\query\SimpleCustomerSelectAllIterator.java:184: シンボルを見つけられません。 シンボル: メソッド setNAME(java.lang.String) 場所 : blancodb.row.SimpleCustomerSelectAllRow の クラス result.setNAME(fResultSet.getString(2)); C:\work\project\OR\src\blancodb\query\SimpleCustomerSelectIterator.java:117: シンボルを見つけられません。 シンボル: メソッド setID(int) 場所 : blancodb.row.SimpleCustomerSelectRow の クラス result.setID(fResultSet.getInt(1)); C:\work\project\OR\src\blancodb\query\SimpleCustomerSelectIterator.java:118: シンボルを見つけられません。 シンボル: メソッド setNAME(java.lang.String) 場所 : blancodb.row.SimpleCustomerSelectRow の クラス result.setNAME(fResultSet.getString(2));
のように、本来setIdやsetNameでなければならないところが、setIDやsetNAMEになってしまっています。テーブル定義を表示してみると、
mysql> desc customer; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | ID | int(11) | | PRI | 0 | | | NAME | varchar(16) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql>
となっているのですが、他のクラスは問題ないため、Captalizeを忘れているのでしょうか。それとも、MySQLかMySQLのJDBCドライバの問題なんでしょうか。。
問題その2: 連続INSERTや連続DELETEがかなり遅い
3テーブルに100件ずつINSERTするのに4秒くらいかかってますが、JDBC直でやった場合は80msくらいなので、二桁オーダーが違っちゃってますね。。SimpleCustomerInsertInvokerのインスタンスは使いまわししているのですが、内部でPreparedStatementの使いまわしは行われていないので(出来るかどうかは別として)、それが原因の一つと言えるかも知れません。
→誤報でした。すみません。。Connection#setAutoCommit(false)してなかったため、毎行コミットしていたのが性能低下の要因だったようです。