jueves, 5 de enero de 2017

JDBI con Groovy

En esta ocasión usaremos Groovy para crear una aplicación usando JDBI. Prácticamente es el mismo código usado la vez anterior que se dio un vistazo a JDBI. La diferencia radica en el uso de @Grapes y Grab para importar y cargar las librerías necesarias.
He aquí el código


/**
*@author Codemonkey Junior Blogspot
*@description Usode JDBI en Groovy
*/
//importamos la librería JDBI con @Grapes, @Grab
@Grapes(
@Grab(group='org.jdbi', module='jdbi', version='2.77')
)
//importamos y cargamos el conector MySQL
@GrabConfig(systemClassLoader=true)
@Grab(group='mysql', module='mysql-connector-java', version='5.1.6')
import java.sql.ResultSet;
import java.sql.SQLException;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import org.skife.jdbi.v2.DBI;
import org.skife.jdbi.v2.Handle;
import org.skife.jdbi.v2.tweak.*;
import org.skife.jdbi.v2.*;
//Clase principal del programa
class JDBIGroovy{
static main(args) {
println "Iniciando ..."
DBI dbi = new DBI("jdbc:mysql://localhost:3306/test",
"root",
"5432");
println "Abriendo conexion ..."
Handle h = dbi.open();
println "Abierto ..."
if(!dbi.open().isInTransaction()){
println "No esta realizando alguna transaccion";
}
PersonajeDAO pers=null;
try{
pers=dbi.open(PersonajeDAO.class);
if(pers.verTodo().size() > 0){
println "Lista de persona llena!!: "+pers.verTodo().size();
println " "+pers.verTodo().toString() != "[null, null, null]" ? "llena" : "vacia";
//Mostramos todos los resultados
for(int i=0 ; i < pers.verTodo().size(); i++){
println "id:"+pers.verTodo().get(i).personaje_id;
println "nombre:"+pers.verTodo().get(i).nombre;
println "apellido paterno:"+pers.verTodo().get(i).apellidos;
println "apellido materno:"+pers.verTodo().get(i).biografia;
}
}
}catch(Exception ex){
println "Error: "+ex.toString()
//ex.printStackTrace();
}finally{
pers.close();
}
h.close();
}
}
//Podemos seguir programando al estilo Java, pero también se puede hacer al estilo Groovy
//Esta es la clase que representa a la tabla personaje
class ModeloPersonaje implements java.io.Serializable{
private static final long serialVersionUID=1L;
private int personaje_id;
private String nombre;
private String apellidos;
private String biografia;
public ModeloPersonaje(){}
public void setPersonaje_Id(int personaje_id){
this.personaje_id=personaje_id;
}
public int getPersonaje_Id(){
return personaje_id;
}
public void setNombre(String nombre){
this.nombre=nombre;
}
public String getNombre(){
return nombre;
}
public void setApellidos(String apellidos){
this.apellidos=apellidos;
}
public String getApellidos(){
return apellidos;
}
public void setBiografia(String biografia){
this.biografia=biografia;
}
public String getBiografia(){
return biografia;
}
}
//Aquí seteamos los valores obtenidos en la consulta
class ModeloPersonajeMapper implements ResultSetMapper<ModeloPersonaje> {
@Override
public ModeloPersonaje map(int arg0, ResultSet r, StatementContext arg2) throws SQLException {
ModeloPersonaje mpersonaje=new ModeloPersonaje();
mpersonaje.setPersonaje_Id(r.getInt("personaje_id"));
mpersonaje.setNombre(r.getString("nombre"));
mpersonaje.setApellidos(r.getString("apellidos"));
mpersonaje.setBiografia(r.getString("biografia"));
return mpersonaje;
}
}
//Esta clase es donde se ejecutan las consultas SQL
@RegisterMapper(ModeloPersonajeMapper.class)
public interface PersonajeDAO {
@SqlQuery("SELECT test.personaje.personaje_id, test.personaje.nombre, test.personaje.apellidos, test.personaje.biografia FROM test.personaje WHERE test.personaje.personaje_id = :id")
ModeloPersonaje findById(@Bind("personaje_id") id);
@SqlQuery("SELECT test.personaje.personaje_id, test.personaje.nombre, test.personaje.apellidos, test.personaje.biografia FROM test.personaje")
List<ModeloPersonaje> verTodo();
void close();
}