唯美古典
          Java入門,Struts,Hibernate,Spring,Groovy,Grails
          posts - 7,comments - 10,trackbacks - 0

          1.Groovy 中的閉包

          Groovy 已經將迭代轉變為任何集合的直接成員。在這個示例中,不必獲取 Iterator 實例并直接操縱它,可以直接在集合上迭代。而且,通常放在循環構造內的行為(例如 for 循環體中 println)接下來要放在閉包內。在深入之前,先看看如何執行這步操作。

          def acoll = ["Groovy", "Java", "Ruby"]   

          acoll.each{

           println it

          }

          請注意,each 直接在 acoll 實例內調用,而 acoll 實例的類型是 ArrayList。在 each 調用之后,引入了一種新的語法 — {,然后是一些代碼,然后是 }。由 {} 包圍起來的代碼塊就是閉包。

          迭代無處不在

          閉包在 Groovy 中頻繁出現,但是,通常用于在一系列值上迭代的時候。請記住,一系列值可以用多種方式表示,不僅可以用列表表示例如,可以在映射、StringJDBC RowsetFile 的行上迭代,等等。

          請記住,凡是集合或一系列的內容,都可以使用下面這樣的代碼進行迭代。

          "ITERATION".each{

           println it.toLowerCase()

          }

          2.Groovy中的?(代表判斷條件)

          Groovy 通過 ? 操作符提供了一個安全網在方法調用前面添加一個 ? 就相當于在調用前面放了一個條件,可以防止在 null 對象上調用方法。

          例如,將 sng2.artist.toUpperCase()

          行替換成 sng2.artist?.toUpperCase()。請注意,也可以省略后面的括號。(Groovy 實際上也允許在不帶參數的方法上省略括號。不過,如果 Groovy 認為您要訪問類的屬性而不是方法,那么這樣做可能會造成問題。)

          ?操作符時刻都非常有用,可以極大地減少條件語句。

          3.集合

          將對象組織到像列表和映射這樣的數據結構中是一項基本的編碼任務,是我們大多數人每天要做的工作。像大多數語言一樣,Groovy 定義了一個豐富的庫以管理這些類型的集合。如果曾經涉足 Python 或者 Ruby,那么應該熟悉 Groovy 的集合語法。

          使用 Groovy 集合

          aCollect = [5, 9, 2, 2, 4, 5, 6]

          println aCollect.join(' - ') // prints 5 - 9 - 2 - 2 - 4 - 5 - 6

          println aCollect.count(2)     // prints 2

          println aCollect.sort()       // prints [2, 2, 4, 5, 5, 6, 9]

          4.輕松的 IO

          Groovy IO 操作很輕松,特別是與迭代器和閉包結合時。Groovy 使用標準 Java 對象如 File  Reader  Writer ,并用接收閉包作參數的額外方法增強了它們。如在清單 24 中,可以看到傳統的 java.io.File ,但是帶有額外的、方便的 eachLine 方法。


          Groovy IO

          import java.io.File

          new File("File-IO-Example.txt").eachLine{ line |

           println "read the following line -> " + line

          }

          因為文件實質上是一系列行、字符等,所以可以相當簡單地迭代它們。 eachLine 方法接收一個閉包并迭代文件的每一行,在這里是 File-IO-Example.txt 以這種方式使用閉包是相當強大的,因為 Groovy 保證所有文件資源都是關閉的,不考慮任何異常。這意味著無需大量 try / catch / finally 子句就可以進行文件 IO

          5. Groovy進行JDBC編程

          Groovy SQL 魔力在于一個叫做 GroovySql 的精致的 API。使用閉包和迭代器, GroovySql 干凈漂亮地把 JDBC 的資源管理職責從開發人員轉移到 Groovy 框架。這么做之后,就消除了JDBC 編程的繁瑣,從而使您可以把注意力放在查詢和查詢結果上。

          執行簡單的查詢

          packagecom.groovy

          import groovy.sql.Sql

          publicclass JDBCGroovy{

              publicstaticvoid main(def args){

                 def sql = Sql.newInstance("jdbc:mysql://localhost:3306/oa","root","122547",

                        "com.mysql.jdbc.Driver")

                 sql.eachRow("select * from t_user"){user ->  

                     println user.username + ":" + user.password

                 }         

              }

          }

          執行復雜的查詢

          前面的例子相當簡單,但是 GroovySql 在處理更復雜的數據操縱查詢(例如 insert update  delete 查詢)時,也是非常可靠的。對于這些查詢,您沒有必要用迭代器,所以 Groovy  Sql 對象另外提供了 execute executeUpdate 方法。這些方法讓人想起普通的 JDBC statement 類,它也有 execute  executeUpdate 方法。 

          在清單 6 中,您看到一個簡單的 insert,它再次以 ${} 語法使用變量替換。這個代碼只是向 word 表插入一個新行。 

          清單 6. GroovySql 進行插入  

          wid = 999

           spelling = "Nefarious"

           pospeech = "Adjective"

           sql.execute("insert into word (word_id, spelling, part_of_speech) 

             values (${wid}, ${spelling}, ${pospeech})")

          Groovy 還提供 execute 方法的一個重載版本,它接收一列值,這些值與查詢中發現的 ? 元素對應。在清單 7 中,我簡單地查詢了 word 表中的某個行。在底層,GroovySql 創建了普通 Java 語言 java.sql.PreparedStatement 的一個實

          例。 

          清單 7. GroovySql 創建 PreparedStatement 的實例

          val = sql.execute("select * from word where word_id = ?", [5]) 

          更新的方式基本相同,也使用 executeUpdate 方法。還請注意,在清單 8  executeUpdate 方法接收一列值,與查詢中的 ? 元素對應。 

          清單 8. GroovySql 進行更新

           nid = 5

           spelling = "Nefarious"

           sql.executeUpdate("update word set word_id = ? where spelling = ?", [nid, spelling])

          刪除實際上與插入相同,當然,語法不同,如清單 9 所示。

          清單 9. GroovySql 進行刪除

           sql.execute("delete from word where word_id = ?" , [5])

          簡化數據操縱

          任何想簡化 JDBC 編程的 API 或工具最好有一些好的數據操縱特性

          數據集(DataSet)

          構建于 GroovySql 簡單性的基礎之上,GroovySql 支持 DataSet 類型的概念,這基本上是數據庫表的對象表示。使用 DataSet,您可以在行中遍歷,也可以添加新行。實際上,用數據集是方便地表示表格的公共數據集合的方式。 

          但是,目前 GroovySql DataSet 類型的不足之處是它們沒有代表關系;它們只是與數據庫表的一對一映射。在清單 10 中,我創建了一個來自 word 表的 DataSet 

          清單 10. GroovySql 創建數據集

          import groovy.sql.Sql

          class GroovyDatasetsExample1{

           static void main(args) {

              sql=Sql.newInstance("jdbc:mysql://localhost:3306/words", "words","words", "org.gjt.mm.mysql.Driver")

              words = sql.dataSet("word")

              words.each{ word |

               println word.word_id + " " + word.spelling

              }    words.add(word_id:"9999",spelling:"clerisy",part_of_speech:"Noun")

           }

          }



          唯美古典的工作室
          posted on 2009-11-30 16:55 唯美古典 閱讀(1665) 評論(0)  編輯  收藏 所屬分類: Groovy

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 华亭县| 长宁区| 扶风县| 阿合奇县| 五台县| 招远市| 云梦县| 越西县| 黄浦区| 大同市| 华亭县| 新化县| 达尔| 越西县| 永吉县| 靖州| 高邮市| 聂荣县| 左云县| 抚州市| 仁怀市| 沙雅县| 沛县| 遂平县| 日土县| 西宁市| 苏尼特右旗| 内丘县| 海林市| 永丰县| 肇庆市| 安陆市| 来宾市| 怀集县| 武冈市| 望江县| 灌南县| 普兰县| 咸丰县| 宝应县| 宽甸|