<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    唯美古典
    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 唯美古典 閱讀(1663) 評論(0)  編輯  收藏 所屬分類: Groovy

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲一区二区三区在线播放| 免费人成在线观看网站视频| 亚洲av一综合av一区| 久久成人18免费网站| 在线亚洲精品福利网址导航| 一个人看的www免费在线视频| 国产成人亚洲精品影院| eeuss在线兵区免费观看| 中文亚洲AV片不卡在线观看| 三年片免费高清版| 亚洲人成在线免费观看| 2021精品国产品免费观看| 久久精品a亚洲国产v高清不卡| 99久久99久久精品免费观看| 亚洲精品视频观看| 亚洲免费综合色在线视频| 国产亚洲精品成人a v小说| 国内精品久久久久影院免费| 亚洲AV成人片色在线观看| 2020因为爱你带字幕免费观看全集 | 亚洲AV无码专区亚洲AV伊甸园| 69免费视频大片| 亚洲AV永久无码精品一福利| 亚洲精品无码久久久久AV麻豆| 免费视频精品一区二区三区| 亚洲国产高清美女在线观看| 精品国产一区二区三区免费看 | 免费精品一区二区三区第35| 久久久久亚洲AV成人片| 欧洲美熟女乱又伦免费视频 | 最近免费mv在线电影| 亚洲日韩一区二区三区| 伊人婷婷综合缴情亚洲五月| 蜜臀98精品国产免费观看| 亚洲6080yy久久无码产自国产| 亚洲乱码中文字幕久久孕妇黑人| 无码国产精品一区二区免费 | 亚洲国产精品无码中文字| 成人片黄网站A毛片免费| 久久er国产精品免费观看8| 亚洲一线产区二线产区精华|