Spring Framework 入門記 JDBCその8 SqlFunction他
職場に行っていないので,StoredProcedure
後編ではなくて,JDBC編の残りをさらっと片づけてしまいたいと思います.StoredProcedure
のOracleでの検証は「その7」に追記するということで.
ということで,まずは
SqlFunction
です.といってもこれ,全然たいしたものではなく,MappingSqlQuery
の派生クラスで,結果セットが1行だけ返す問い合わせをお手軽に扱うためのクラスに過ぎません.なので,例によって
-
dataSource
sql
types
というプロパティを設定して問い合わせを実行します.
特に select count(*) from・・・
を意識しているようで,結果をint
で受け取る
-
int run()
int run(int)
int run(Object[])
といったメソッドが用意されています.
それから,結果をObject
で受け取るための
-
Object runGeneric()
Object runGenerid(int)
Object runGeneric(Object[])
も用意されています.
これはこんなところですかね.
これで一応,「9.4. Modeling JDBC operations as Java objects」はお終いです.やったね!
あと「Chapter 9. Data Access using JDBC」に出てくるけど,これまですっ飛ばしてきたものを軽〜く眺めてみると...
SQLExceptionTranslater
このinterface
は,SQLException
をSpringのuncheckedで階層化された例外(DataAccessException
)に変換するものです.主要なRDBMSはSpringがサポートしてくれているのですが,それ以外のマイナーなRDBMSを使う場合には,このinterface
をimplements
したclass
を用意するみたい.実際には,
SQLErrorCodeSQLException
というclass
が用意されているので,それをextends
すればいいようです.
そしてそれを org/springframework/jdbc/support/sql-error-codes.xml
記述してあげればよさげ.頑張って>id:ukki4903さん(^^;
それから,DataSource
をexteds
したinterface
である
SmartDataSource
と,それをimplements
したclass
がいくつかあったみたい.
DriverManagerDataSource
SingleConnectionDataSource
SmartDataSource
ってどんなに賢いんだろう? ってドキドキしちゃいますが,実のところ
-
boolean shouldClose(Connection)
というメソッドが用意されているだけです.何がしたいの?
どうやらですね,前述のDataSource
の実装はConnection
のプロキシではなく,DriverManager
が生成したConnection
をそのまま返すのですね.それで,DriverManagerDataSource
の方は,getConnection()
の度に新しいConnection
を返すので,それのclose()
を呼び出さなきゃいけないけど,SingleConnectionDataSource
の方は何度getConnection()
を呼び出されても単一のConnection
を返すので,close()
を呼び出されては困る,そこでshouldClose()
が必要という事みたい... スマート?
うーみゅ,これ以上追求するのは止めておこう.
これで9章は終わりかなぁ.ちょっと時間をかけすぎたくらいだと思うので,もういいでしょう.
ということで,本来なら次は「Chapter 10. Data Access using O/R Mappers」なのですが,内容はほとんどHibernateと組み合わせて使う場合の話です.一応JDOとiBATISも見出しだけはあるのですが,中身は「ToDo」だけだったり.(^^;
しかしながら私,Hibernateを触ったことがありません.それで10章に進むのはどうよ? というわけで,「Spring Framework 入門記」は当分お休みにして,以前からひがさん他にリクエストされていた「Hibernate入門記」を近々始めたいと思います.来週からかなぁ?