Si bien es cierto Grails nos provee de una base de datos, esta es sumamente básica, por lo que generalmente trabajaremos con una base de datos diferente, por ejemplo PostgreSQL, MySQL, Oracle, etc.
Por suerte, gracias a lo que nos ofrece, hacer esto en Grails, no es para nada complicado. En primero lugar creamos la aplicación y luego creamos una base de datos, en este caso lo haremos en Mysql:
$ grails create-apps nombre_aplicacionO también podemos hacerlo un poco más fácil si es que utilizamos un administrador como PhpMyAdmin.
$ mysql -u root -p
//Ingresar contraseña
create database testgrailsdb
quit
Ahora debemos descargarnos el conector que hará la conexión con la base de datos, en este ejemplo utilizaré MySQL, para esto vamos a http://dev.mysql.com/downloads/connector/j/ y lo dejamos en el directorio lib, si estas en Netbeans lo dejas en Libraries.
Luego creamos un dominio, le creamos atributos y generamos el control y la vista para este. Para hacer esto debemos estar dentro del directorio de nuestra aplicación.
$ grails create-domain-class Persona
$ nano grails-app/domain/
//Agregamos los campos que deseemos, por ejemplo
class Personas {
String nombre
String apellido
static constraints = {
}
}
//Ahora generamos el controlador y la vista para esto
grails generate-all Personas
Una vez terminado todo esto debemos ir al fichero DataSource.groovy.
grails-app/conf/DataSource.groovyO si es como en mi caso, que utilizan Netbeans como IDE de desarrollo, deben ir a:
Configuration/DataSource.groovyUna vez dentro de este fichero, encontraremos varias líneas de código, parecido a esto:
dataSource {El cual debemos modificarlo y dejar algo parecido a esto:
pooled = true
driverClassName = "org.h2.Driver"
username = "sa"
password = ""
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
development {
dataSource {
dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
url = "jdbc:h2:mem:devDb;MVCC=TRUE"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:h2:mem:testDb;MVCC=TRUE"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:h2:prodDb;MVCC=TRUE"
pooled = true
properties {
maxActive = -1
minEvictableIdleTimeMillis=1800000
timeBetweenEvictionRunsMillis=1800000
numTestsPerEvictionRun=3
testOnBorrow=true
testWhileIdle=true
testOnReturn=true
validationQuery="SELECT 1"
}
}
}
}
dataSource {
pooled = true
driverClassName = 'com.mysql.jdbc.Driver'
dbCreate = 'update'
username = "nombreusuario"
password = "contraseña"
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
development {
dataSource {
url = "jdbc:mysql://localhost:3306/nombredb" // one of 'create', 'create-drop', 'update', 'validate', ''
username = "nombreusuario"
password = "contraseña"
}Este ejemplo mostramos como conectarnos a MySQL, pero la base es muy similar para otros motores de base de datos.
}
test {
dataSource {
url = "jdbc:mysql://localhost:3306/nombredb" // one of 'create', 'create-drop', 'update', 'validate', ''
username = "nombreusuario"
password = "contraseña"
}
}
production {
dataSource {
url = "jdbc:mysql://localhost:3306/nombredb" // one of 'create', 'create-drop', 'update', 'validate', ''
username = "nombreusuario"
password = "contraseña"
}
}
}
}
Como dato, dentro de las clases encontramos “Static constraints” dentro de este tenemos harto para jugar, por ejemplo hacer que sea “not null” “unique”, entre otros, ejemplo básico de esto es:
class Personas {
String nombre
String apellido
static constraints = {
nombre(unique: true, blank: false)
apellido(blank:false)
}
}
1 comentarios:
Error 2013-01-10 21:12:16,513 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'hibernateProperties' while setting bean property 'hibernateProperties'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateProperties': Cannot resolve reference to bean 'dialectDetector' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
Message: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'hibernateProperties' while setting bean property 'hibernateProperties'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateProperties': Cannot resolve reference to bean 'dialectDetector' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
Publicar un comentario