jueves, 13 de abril de 2017

JDBI con Groovy (3)



Siguiendo con el tema de JDBI está ocasión veremos una pequeña aplicación del tipo CRUD (altas, bajas, consultas y modificaciones).

Necesitamos crear una base de datos;

CREATE DATABASE test;

Una vez creada procedemos a seguir con estos pasos.

  1. Crear un archivo *.sql llamado bien.sql para la creación de la tabla
  2. Crear una BD en MySQL
  3. Usar el archivo *.sql de la siguiente manera: $ mysql -u USUARIO -pCLAVE test  < bien.sql
  4. Crear un archivo froovy llamado Dao2.groovy
  5. Importar las librerías necesarias para manipular datos y crear un log: jdbi, slf4j, y mysql mediante @Grapes
  6. Crear una interface llamada BienDAO; esta interface contendrá los métodos con las declaraciones necesarias para la gestión de los datos
  7. Crear una clase serializable llamada ModeloBien
  8. Crear una clase que implemente la interface ResultSetMapper
  9. Crear una clase principal (en este caso tendrá el mismo nombre del archivo)
bien.sql
CREATE TABLE IF NOT EXISTS bien(id int auto_increment primary key,numero int, usuario varchar(45), password varchar(32), maquina ENUM('pc','macosx','laptop_pc','laptop_macosx','movil'), sistema ENUM('windows','macosx','linux','android'), area ENUM('direccion','sistemas','soporte','hemeroteca','evaluacion','investigacion'), ip varchar(15), no_bien varchar(45));
INSERT INTO bien (numero, usuario, password, maquina, sistema, area, ip, no_bien) VALUES ('39','Yuri Gagarin','5432','pc','windows','sistemas','148.215.24.39','7749'),('36','Maria Petrovska','009GT2b','pc','linux','hemeroteca','148.215.24.36','7767'),('90','Tulio Alvarez','$36@L77','laptop_macosx','macosx','investigacion','172.215.22.25','4343');
UPDATE bien SET area='investigacion' WHERE id=2;
UPDATE bien SET area='soporte' WHERE id=1;
DELETE FROM bien WHERE id=3;
SELECT * FROM bien;


$ mysql -u TUUSUARIO -pTUCLAVE test < bien.sql

 Esto nos permitirá cargar los datos contenidos en el archivo.

El programa consiste en un menú que te dará las opciones de insertar, consultar por id, consultar todos los registros, actualizar los datos por id y eliminar datos por id.


 compilar: groovyc Dao2.groovy
 ejecutar: groovy Dao2.groovy TUUSUARIO TUCLAVE


Ejemplo de uso y salida: 
$ mysql -u root -p5432 test < bien.sql

$ groovyc Dao2.groovy

$groovy Dao2.groovy root 5432

[main] INFO jdbi - Iniciando script ...
[main] INFO jdbi - usuario: root
[main] INFO jdbi - password: 5432
    ******* Menu *******
1. Insertar datos
2. Consultar datos por id
3. Consultar total de datos
4. Actualizar datos por id
5. Eliminar datos por id
6. Salir
*******************************
Escoge una opción:2
    [Consulta por id]

Escribe el id:
2
    >> Id: 2
    >> Número: 36
    >> Usuario: Maria
    >> Password: 009GT2b
    >> Máquina: pc
    >> Sistema: linux
    >> Área: investigacion
    >> Ip: 148.215.24.36
    >> No_bien: 7767
    Búsqueda realizada
    ******* Menu *******
1. Insertar datos
2. Consultar datos por id
3. Consultar total de datos
4. Actualizar datos por id
5. Eliminar datos por id
6. Salir
*******************************
Escoge una opción:




 Dao2.groovy


/**
*@author Codemonkey Junior Blogspot
*@description Uso de JDBI
*/
//compilación: groovy Dao2.groovy
//ejecución: groovy Dao2.groovy rootMySQL clave
@Grapes( [
@Grab(group='org.slf4j', module='slf4j-api', version='1.7.25'),
@Grab(group='org.slf4j', module='slf4j-simple', version='1.7.6'),
@Grab(group='org.jdbi', module='jdbi', version='2.77'),
@Grab(group='mysql', module='mysql-connector-java', version='5.1.26'),
@GrabConfig(systemClassLoader=true)
]
)
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
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.*;
import org.skife.jdbi.v2.util.*;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.GetGeneratedKeys;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
class Dao2{
static main(args) {
def log1 = LoggerFactory.getLogger('jdbi');
log1.info 'Iniciando script ...'
log1.info 'usuario: '+args[0]
log1.info 'password: '+args[1]
if(args.length > 0){
for(;;){
int opc= Integer.parseInt(menu())
principal(opc, args[0], args[1])
}
}
}
static String menu(){
String opc;
println "\t******* Menu *******"
println "1. Insertar datos"
println "2. Consultar datos por id"
println "3. Consultar total de datos"
println "4. Actualizar datos por id"
println "5. Eliminar datos por id"
println "6. Salir"
println "*******************************"
opc=System.console().readLine 'Escoge una opción:'
return opc;
}
static void principal(int opcion, String user, String passw){
def id=0
def numero=0
def usuario=""
def password=""
def maquina=""
def sistema=""
def area=""
def ip=""
def no_bien=""
def log2 = LoggerFactory.getLogger('jdbi');
Scanner sc = new Scanner(System.in);
DBI dbi = new DBI("jdbc:mysql://localhost:3306/test",user,passw);
BienDAO dao= null;
try {
dao=dbi.open(BienDAO.class);
switch(opcion) {
case 1:
println "\t[Inserción]\n"
println "Número: "
numero= sc.nextInt();
usuario=System.console().readLine 'Usuario:'
password=System.console().readLine 'Password:'
maquina=System.console().readLine 'Máquina:'
sistema=System.console().readLine 'Sistema:'
area=System.console().readLine 'Área:'
ip=System.console().readLine 'Ip:'
no_bien=System.console().readLine 'No.bien:'
dao.insertar(numero, usuario, password, maquina, sistema, area, ip, no_bien);
println "\tInserción realizada"
break;
case 2:
println "\t[Consulta por id]\n"
println "Escribe el id: "
id= sc.nextInt();
println "\t>> Id: "+dao.encontrarPorId(id).id
println "\t>> Número: "+dao.encontrarPorId(id).numero
println "\t>> Usuario: "+dao.encontrarPorId(id).usuario
println "\t>> Password: "+dao.encontrarPorId(id).password
println "\t>> Máquina: "+dao.encontrarPorId(id).maquina
println "\t>> Sistema: "+dao.encontrarPorId(id).sistema
println "\t>> Área: "+dao.encontrarPorId(id).area
println "\t>> Ip: "+dao.encontrarPorId(id).ip
println "\t>> No_bien: "+dao.encontrarPorId(id).no_bien
println "\tBúsqueda realizada"
break;
case 3:
println "\t[Consulta total]\n"
if(dao.verTodo().size() > 0){
println "Lista de persona llena!!: "+dao.verTodo().size();
for(int i=0 ; i < dao.verTodo().size(); i++){
println "\t**Id:"+dao.verTodo().get(i).id;
println "Número:"+dao.verTodo().get(i).numero;
println "Usuario:"+dao.verTodo().get(i).usuario;
println "Password:"+dao.verTodo().get(i).password;
println "Máquina:"+dao.verTodo().get(i).maquina;
println "Sistema:"+dao.verTodo().get(i).sistema;
println "Área:"+dao.verTodo().get(i).area;
println "Ip:"+dao.verTodo().get(i).ip;
println "No.bien:"+dao.verTodo().get(i).no_bien;
}
}
break;
case 4:
println "\t[Actualización por id]\n"
println "Escribe el id: "
id= sc.nextInt();
println "Número: "
numero= sc.nextInt();
usuario=System.console().readLine 'Usuario:'
password=System.console().readLine 'Password:'
maquina=System.console().readLine 'Máquina:'
sistema=System.console().readLine 'Sistema:'
area=System.console().readLine 'Área:'
ip=System.console().readLine 'Ip:'
no_bien=System.console().readLine 'No.bien:'
dao.modificarPorId(id, numero, usuario, password, maquina, sistema, area, ip, no_bien);
println "\tActualización realizada"
break;
case 5:
println "\t[Eliminación por id]\n"
println "Escribe el id: "
id= sc.nextInt();
dao.eliminarPorId(id);
println "\tEliminación realizada"
break;
case 6:
println "\t[Adiós]\n"
log2.info 'Cerrando conexión'
dao.close();
System.exit(0)
break;
default:
println "\tEsa opción no existe"
break;
}
}
catch(Exception e) {
log2.error 'Error: '+e.toString()
}
}
}
class ModeloBien implements java.io.Serializable{
private static final long serialVersionUID=1L;
int id
int numero
String usuario
String password
String maquina
String sistema
String area
String ip
String no_bien
}
class ModeloBienMapper implements ResultSetMapper<ModeloBien> {
@Override
public ModeloBien map(int arg0, ResultSet r, StatementContext arg2) throws SQLException {
ModeloBien mbien=new ModeloBien();
mbien.id=r.getInt("id")
mbien.numero=r.getInt("numero")
mbien.usuario=r.getString("usuario")
mbien.password=r.getString("password")
mbien.maquina=r.getString("maquina")
mbien.sistema=r.getString("sistema")
mbien.area=r.getString("area")
mbien.ip=r.getString("ip")
mbien.no_bien=r.getString("no_bien")
return mbien;
}
}
@RegisterMapper(ModeloBienMapper.class)
interface BienDAO {
@SqlUpdate("INSERT INTO test.bien (numero, usuario, password, maquina, sistema, area, ip, no_bien) VALUES(:numero, :usuario, :password, :maquina, :sistema, :area, :ip, :no_bien)")
void insertar(@Bind("numero") int numero, @Bind("usuario") String usuario, @Bind("password") String password,@Bind("maquina") String maquina,@Bind("sistema") String sistema,@Bind("area") String area,@Bind("ip") String ip, @Bind("no_bien") String no_bien);
@SqlQuery("SELECT * FROM test.bien where id = :id")
ModeloBien encontrarPorId(@Bind("id") int id);
@SqlQuery("SELECT test.bien.id, test.bien.numero, test.bien.usuario, test.bien.password, test.bien.maquina, test.bien.sistema,test.bien.area,test.bien.ip,test.bien.no_bien FROM test.bien")
List<ModeloBien> verTodo();
@SqlUpdate("UPDATE test.bien SET numero = :numero, usuario = :usuario, password = :password, maquina = :maquina, sistema = :sistema, area = :area, ip = :ip, no_bien = :no_bien where id = :id")
void modificarPorId(@Bind("id") int id, @Bind("numero") int numero,@Bind("usuario") String usuario, @Bind("password") String password,@Bind("maquina") String maquina,@Bind("sistema") String sistema,@Bind("area") String area,@Bind("ip") String ip, @Bind("no_bien") String no_bien);
@SqlUpdate("DELETE FROM test.bien where id = :id")
void eliminarPorId(@Bind("id") int id);
void close();
}
view raw Dao2.groovy hosted with ❤ by GitHub

domingo, 9 de abril de 2017

JDBI con Groovy (2)

En esta ocasión veremos un ejemplo del uso de JDBI con Groovy.
  1. Una clase principal llamada Dao.groovy
  2. Una interface llamada MyDAO
 MyDAO contendrá los método necesarios para crear una tabla, insertar valores, buscar un registro mediante su id y ,por último un método para cerrar.

El código viene de la página oficial de JDBI. Espero les sirva.



/**
*
*@author Codemonkey Junior
*/
//compilar: groovyc Dao.groovy
//ejecutar: groovy Dao.groovy
@Grapes(
@Grab(group='org.jdbi', module='jdbi', version='2.77')
)
@GrabConfig(systemClassLoader=true)
@Grab(group='mysql', module='mysql-connector-java', version='5.1.26')
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.*;
import org.skife.jdbi.v2.util.*;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.GetGeneratedKeys;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
class Dao{
static main(args) {
DBI dbi = new DBI("jdbc:mysql://localhost:3306/test",
"root",
"5432");
MyDAO dao = dbi.open(MyDAO.class);
String name=null
try {
dao.createSomethingTable();
println "Tabla creada"
dao.insert(1, "Ariel");
println "Datos insertados"
name = dao.findNameById(1);
println "Hola $name"
//assertThat(name, equalTo("Ariel"));
}
catch(Exception e) {
println "Error: "+e.toString()
}
dao.close();
}
}
interface MyDAO {
@SqlUpdate("create table prueba (id int primary key, name varchar(100))")
void createSomethingTable();
@SqlUpdate("insert into prueba (id, name) values (:id, :name)")
void insert(@Bind("id") int id, @Bind("name") String name);
@SqlQuery("select name from prueba where id = :id")
String findNameById(@Bind("id") int id);
void close();
}
view raw Dao.groovy hosted with ❤ by GitHub