miércoles, 23 de marzo de 2011

Grails y Bases de Datos.

Aunque la cafetería ha estado un poco descuidada retomo el asunto. Pondré traducciones de artículos que vea y que me sean interesantes a mí. Principalmente en Griffon, que es lo que me interesa más, pero tambien de Grails (que a fin de cuentas es como el padre de todo). Espero poner tambien algo de mi cosecha.
Ahí va la primera, basada en una entrada de Andrés Almiray en su blog
Profundizando en el interior del sitio web de Groovy, descubrí GORM, el framework de Grails ORM. Al ser un marco construido encima de Hibernate no me sorprende tanto como el hecho de que puede generar dinámicamente métodos en las clases de dominio basados ​​en las propiedades y los predicados de dichas propiedades.Por ejemplo, hay un método dinámico findAllBy que le ayudará a encontrar todas las entidades con ciertos criterios.

Para que yo me aclare ORM es "mapeo de objetos a bases de datos". Con Grails utilizamos bases de datos orientadas a objetos y ORM convierte estos objetos a tablas. A mí se me hace un poco dificil porque ya estaba acostumbrado a las bases de datos relacionales. Veamos el ejemplo que nos pone Andrés Almiray:

class Libro {
Long id
Long version
String titulo
Date fechaPublic
String autor
}


Esta es una clase del modelo (dominio). En el proyecto Grails lo tenemos en grails-app/domain/com/miaplicacion/Libro.groovy
A continuación y ya en el controlador, podemos hacer búsquedas de esta manera tan sencilla: (código de la página de Andrés Almiray)

def resultados = Libro.findAllByTitulo("The Shining", [max:10, sort:"title", order:"desc", offset:100] )
resultados = Libro.findAllByTituloAndAutor("The Sum of All Fears", "Tom Clancy")
resultados = Libro.findAllByFechaPublicBetween(firstDate, new Date())
resultados = Libro.findAllByFechaPublicGreaterThanOrEqual(firstDate)
resultados = Libro.findAllByTituloLike("%Hobbit%")
resultados = Libro.findAllByTituloNotEqual("Harry Potter")
resultados = Libro.findAllByFechaPublicIsNull()
resultados = Libro.findAllByFechaPublicIsNotNull()

El código se explica bastante bien por sí solo, si acaso dentro de unos meses veo que no se entiende muy bien, haré algunas aclaraciones para acordarme bien.

No hay comentarios:

Publicar un comentario