34. 下記はgroovy user MLから情報を頂きました
http://groovy.329449.n5.nabble.com/Mapping-GroovyResultSet-to-POGOs-td368903.html
Groovy(動的言語)でのRDBプログラミングのメリット
RDB設計変更時の影響が少ない
import groovy.sql.Sql
class Staff {
def ID
def NAME •クラス(Groovy Beans)定義。この時点では型を指定していない
def SALARY
}
def getHighPaidStaffs (salary) {
sql = Sql.newInstance("jdbc:db2:sample","","","com.ibm.db2.jcc.DB2Driver") •引数より高いSALARY
def staffs = [] のスタッフ一覧をDBか
sql.eachRow("SELECT ID,NAME,SALARY FROM STAFF WHERE SALARY > ${salary}"){ ら取得する関数
staffs << new Staff(it.toRowResult())
}
•関数内に型の情報が
return staffs 結果セットからStaffオブジ 無い
} ェクトを作成し、staffsコレ
//スタッフを取得し、画面に表示
クションに詰める
staffs = getHighPaidStaffs(90000)
staffs.each { > groovy testsql5.groovy •SALARYが
println "${it.ID}:${it.NAME}:${it.SALARY}" 90,000以上は
} 10:Sanders:98357.50
140:Fraye:91150.00
3名
//CLASS名を表示 210:Lu:90010.00
println "staffs: "+staffs.class
staffs: class java.util.ArrayList
println "staff: "+staffs[0].class
staff: class Staff •取得したデー
println "ID: "+staffs[0].ID.class
println "NAME: "+staffs[0].NAME.class ID: class java.lang.Integer タは、RDB定
println "SALARY: "+staffs[0].SALARY.class NAME: class java.lang.String 義と同じ型を持
34 SALARY: class java.math.BigDecimal っている
35. (補足)前ページのStaffクラスのプロパティを小文字にする
前ページのソースコードでStaffクラスのプロパティが大文字になっているのは、
DB2のSAMPLE DBのSTAFF表の各列が大文字で定義されているためです
–RDBでは、オブジェクトの名前を大文字で定義するのは一般的です
プロパティを小文字にしたい場合、SELECTの列リストにASを付けてアンサー
セット上の名前を変える(別名を付ける)のが簡単です
class Staff {
def id
def name "SELECT ID as id, NAME as name, SALARY as salary FROM ..."
def salary
}
ただし、DB2では「コーテーションで囲まれていない小文字英語リテラルは自動
的に大文字に変換される」ため、以下のようにコーテーションで囲む必要があり
ます(ちょっと面倒ですね)
※ヒアドキュメントで記述すれば、コーテーションの前のエスケープ(¥)は省略できます
"SELECT ID as ¥"id¥",NAME as ¥"name¥", SALARY as ¥"salary¥" FROM ... "
35