WEB开发网
开发学院软件开发Java 实战 Groovy: 用 Groovy 生成器作标记 阅读

实战 Groovy: 用 Groovy 生成器作标记

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: 让我们逐步来了解这一过程,首先,实战 Groovy: 用 Groovy 生成器作标记(6),创建一个生成器实例,在本例中是 MarkupBuilder,或者当需要以最少的开发时间和精力来产生可工作的解决方案时,生成器也是一个不错的选择,因为您想要生成 XML,最外面的 XML 元素(也就是&ld

让我们逐步来了解这一过程。首先,创建一个生成器实例,在本例中是 MarkupBuilder,因为您想要生成 XML。最外面的 XML 元素(也就是“根”)是 words,这样就创建了一个 words 方法。在闭包里,调用第一个查询,并在迭代中将查询结果映射到 word 子节点。

接着,通过两个新的查询,创建 word 的两个子节点。创建一个 definitions 对象,并在迭代中映射它,接着用同样的方法处理 synonyms。


清单 7. 用生成器集合所有元素
import groovy.sql.Sql 
import groovy.xml.MarkupBuilder 
import java.io.File 
import java.io.StringWriter 
class WordsDbReader{ 
 static void main(args) { 
  sql = Sql.newInstance("jdbc:mysql://localhost/words", 
   "words", "words", "org.gjt.mm.mysql.Driver") 
  writer = new StringWriter()  
  builder = new MarkupBuilder(writer) 
  builder.words() { 
   sql.eachRow("select word_id, spelling, part_of_speech from word"){ row | 
    builder.word(spelling:row.spelling, partofspeech:row.part_of_speech){ 
     
  builder.definitions(){ 
      sql.eachRow("select definition from definition where word_id = ${row.word_id}"){ defrow | 
       builder.definition(defrow.definition) 
      } 
     } 
     
  builder.synonyms(){       
      sql.eachRow("select spelling from synonym where word_id = ${row.word_id}"){ synrow | 
       builder.synonym(synrow.spelling) 
      }            
     } 
    } 
   } 
  } 
  new File("dbouuput.xml").withPrintWriter{ pwriter | 
   pwriter.println writer.toString() 
  } 
 } 
} 

结束语

这里,我向您展示的绑定解决方案似乎简单得让人难以置信,特别是以 Java 纯化论者的观点看来更是如此。尽管该解决方案不比使用绑定框架(如 JABX 和 JiBX) 更好,但它确实更快一些 —— 而且,我主张使用这样较简单的方法。是不是我在简单的 Java 代码中做一些类似的事情?是的,但我敢肯定,某些时候我也不得不处理 XML。

用 Groovy 生成器进行开发的速度和简易性,在调用标记的时候可大显神威。例如,就像在第二个例子里展示的那样,我可以马上加快数据库的 XML 表示。对于原型化,或者当需要以最少的开发时间和精力来产生可工作的解决方案时,生成器也是一个不错的选择。

在下个月的实战 Groovy 中我会讲些什么呢?哦,当然是在 Java 语言中使用 Groovy!

上一页  1 2 3 4 5 6 

Tags:实战 Groovy Groovy

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接