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

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


    網站導航:
     
    主站蜘蛛池模板: 无码人妻丰满熟妇区免费| 成人黄色免费网址| 久久国产精品免费看| 永久免费av无码网站大全| 国精无码欧精品亚洲一区| 亚洲精品123区在线观看| 精品熟女少妇aⅴ免费久久| 最近免费中文字幕大全| 亚洲av永久无码精品国产精品| 亚洲aⅴ无码专区在线观看春色 | 在线免费播放一级毛片| 成人免费无毒在线观看网站| 一本色道久久88—综合亚洲精品 | 亚洲精品一品区二品区三品区| 久久久精品视频免费观看 | 伊人久久五月丁香综合中文亚洲| 最新仑乱免费视频| 看一级毛片免费观看视频| 免费看美女裸露无档网站| 久久久久无码精品亚洲日韩| 一个人看的www免费高清| 国产美女精品视频免费观看| 亚洲人成www在线播放| 精品少妇人妻AV免费久久洗澡| 香港特级三A毛片免费观看| 国产精品麻豆免费版| 国产福利免费视频 | 成在人线av无码免费高潮喷水| 亚洲欧洲中文日韩久久AV乱码 | 中文字幕亚洲综合小综合在线| 最近免费中文字幕大全免费版视频| 精品国产_亚洲人成在线高清| 久久A级毛片免费观看| 亚洲a无码综合a国产av中文| 国产成人免费全部网站| 中国一级毛片免费看视频| 亚洲精品亚洲人成在线观看| 五月婷婷综合免费| aa午夜免费剧场| 中国亚洲呦女专区| 久久精品国产亚洲综合色|