Groovy: Extracting XML from your database (RU)

Рубрика: Development, Groovy | 7 March 2007, 16:44 | Vadim Voituk

Немного практического применения для хваленого мной Groovy (1, 2).
Перевод статьи Groovy 101: Extracting XML from your database.

Сразу приведу небольшой сниппет, а потом уже поясню как он работает:
[java]import groovy.sql.Sql;
import groovy.xml.MarkupBuilder;

def sql = Sql.newInstance(“jdbc:oracle:thin:@//tgrall-linux:1521/XE”,
“HR”, “HR”, “oracle.jdbc.driver.OracleDriver”)
def set = sql.dataSet(“EMPLOYEES”);

def writer = new StringWriter()
def xml = new MarkupBuilder(writer)

xml.employees() {
set.each { emp ->
employee(first: emp.first_name , last: emp.last_name) {
email( emp.email )
}
}
}

println writer.toString();
[/java]

Первых 2 строки – импорт необходимых классов
Далее 2 строки – поключение к БД (Oracle JDBC драйвет должен быть указан в CLASSPATH)
Ещё 2 строки создание экземпляров StringWriter и MarkupBuilder.
C первым классом вопросов быть не должно – это часть платформы Java, а вот второй это уже Groovy-класс для генерации XML и HTML на основе так называемых Builder-ов.

Builder-ы в Groovy – это что-то вроде семантических интерпретаторов структур списков на базе класса groovy.util.BuilderSupport.
Т.е. если необходима альтернативная интерпретация некоторых Groovy структур достаточно создать свой Builder.
Тут проявляется популярная во многих языках парадигма Data-as-Code & Code-as-Data.

Смотрим далее по коду:
Внутри замыкания xml.employees{...} перечисляются все записи из ResultSet: set.each{...} и из каждой создается очередное замыкание.

Ну и последняя строка – этот вывод полученного результата.
В принципе если вывод нужно производить в stdout, то создание StringWriter-а не обязательно.

Описанный пример, отлично демонстрирует такие возможности Groovy как замыкания, Builder-ы и работу с SQL.

Кому там ещё надо экспорт из БД в XML-наваять?

P.S. Кстати обратные действия производятся ещё проще.

Оставьте комментарий!

Leave a Reply