Groovy& Grails學習紀錄
以前一直對動態編譯語言不太感冒,覺得那個開發過程還是蠻痛苦的,可能習慣了IDE工具的支援,轉而學習動態語言卻回退到了文字編輯的時代,習慣了即時編譯報錯,對於這種滯後性的執行期的編譯保持敵對心理,這也是我個人一直最為詬病的地方。不過這也是動態語言的優勢,動態元素引入的靈活性確實也是不言而喻的。現在動態語言也是越來越火,公司也開始在很多地方使用。於是乎 昨天興致來了,一天斷斷續續的翻閱了下相關文件,這裡不做各種語言對比,個人一樣覺得使用什麼語言和語言本身特性以及使用者個人喜好有關係。groovy的語法習慣還是和java 有些相似的,比如類的定義,異常,攔截器等。最主要的還是和java 語言本身結合的非常緊密,他可以直接呼叫java,也可以被java程式所呼叫。並執行在jvm中,這種和 java 的無縫結合對於利用現有的java 成果是相當有益的。這裡記錄下學習軌跡,年紀大了容易忘記,這裡記錄下自己容易忘記的點,哈哈。
1:包含在try塊中的變數,如果是通過def 定義的,其作用域範圍是在快中,
def a = 'good morning'
try{
def b = 'greetings', c = 'nice day'
//'def' keyword applies to both 'b' and 'c'
assert a == 'good morning'
assert b == 'greetings'
}catch (Exception ){
}
assert a == 'good morning'
//println b //a compile error if uncommented: b not visible here
2:定義變數的時候如果已經存在可見的同名變數,編譯時不會通過的
def a = 'island'
//def a = 'snake' //a compile error if uncommented: a already defined
try{
//def a = 'jewel' //a compile error if uncommented: a already defined
}catch (Exception ){
}
3:functions 不能夠巢狀
def f(){
//def g1(){ println 'there' }
//a compile error when uncommented: can't nest functions
'here'
}
assert f() == 'here'
try{
//def g2(){ println 'yonder' }
//a compile error when uncommented: can't nest functions
}catch(Exception ){
}
c = {
//def g3(){ println 'outer space' }
//a compile error when uncommented: can't nest functions
}
def h(){
try{ def c = { 'here, again' } }catch (Exception ){
}
//we can have blocks and closures within functions
}
4:異常層級關係:
java.lang.Object
java.lang.Throwable
java.lang.Error
java.lang.Exception
5:groovy 的資料庫連線:
需要匯入jtds 的jar包,下載後放入groovy的載入路徑即可。
import groovy.sql.Sql
sql = Sql.newInstance("jdbc:mysql://10.232.31.7:3306/tc_report", "username",
"passWord", "net.sourceforge.jtds.jdbc.Driver")
sql.eachRow("select * from cart_order_0001", { println it.report_id + " -- ${it.biz_type} --"} );
具體介面的使用需要參考 groovy doc
這裡有相當詳細的描述。
對於 DO 與表之間的關係對映,以及DO 之間關係的對映都體現在 POGO中,對於這點與傳統的do與mapping 的分離是不同的。
這裡的ORM對映機制 使得使用起來方便了很多。 不過這應該也是使得Grails 一直被詬病的效能問題的一個原因點。