Artefacto encargado de conectarse a una base de datos y realizar las tipicas operaciones CRUD de manera simple y eficiente.
Separar la lógica de negocios de la capa de acceso a datos, utilizando la minima cantidad de lineas de código.
Podes utilizar el siguiente artefacto para descargar Kimera en tu proyecto
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<dependency>
<groupId>com.github.yogonza524</groupId>
<artifactId>kimera</artifactId>
<version>1.0.4</version>
</dependency>
JBoss Java EE 6 Specification APIs
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
<version>1.0.0.Final</version>
<type>pom</type>
<scope>provided</scope>
</dependency>
Hibernate Entity Manager
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
Los test unitarios se realizaron con una base de datos PostgreSQL con el siguiente driver
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.2-1003-jdbc4</version>
</dependency>
Clase necesaria para crear la conexión a la Base de Datos. Se puede notar que la libreria esta preparada para ser implementada en un servidor Openshift, cuando corre en la máquina local debe remover el datasource que ofrece el servidor Openshift. Si quieres utilizar tu propio datasource solo comenta las lineas del "if(System...){...}
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from standard (hibernate.cfg.xml)
// config file.
Configuration config = new Configuration();
config.configure();
if (System.getenv("OPENSHIFT_POSTGRESQL_DB_HOST") == null) {
config.getProperties().remove("hibernate.connection.datasource");
}
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(config.getProperties());
sessionFactory = config.buildSessionFactory(builder.build());
} catch (Throwable ex) {
// Log the exception.
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Actualmente tengo una base de datos de todas las recargas de saldo virtual realizados en el comercio de mis padres, se ve algo así:
Por otro lado tengo una tabla que cree para guardar todos los números móviles de los clientes
(sacados de la tabla Recargas)
A partir de aqui se necesitan generar los archivos Hibernate
- hibernate.cfg.xml
- hibernate.revenge.xml
- Entities POJO generados con Hibernate Tools 4.3.1
Con eso podemos realizar el siguiente Test Unitario
Vamos a obtener un Objeto "Recarga" y otro "Numeros" de la base de datos "recargas"
@Test
public void kimeraTest(){
Kimera k = new Kimera();
Recarga r = k.byId("nroVenta", 181241356L, Recarga.class);
assertNotNull(r);
System.out.println(r.getDestino());
Numeros n = k.byId("numero", "57000747657534016", Numeros.class);
assertNotNull(n);
System.out.println("Numero encontrado: " + n.getNumero() + ". Empresa: " + n.getOperadora());
}
Cuya salida es:
3794894328
Numero encontrado: 57000747657534016. Empresa: DIRECTV (3)
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.807 sec
all(Class type): devuelve una lista del tipo List con todos los objetos de la clase type (SELECT * FROM type as TABLE)
byId(String key,Object value, Class type): obtiene un objeto de la clase type a partir del campo "key" y el valor "value"
remove(Object obj): elimina un objeto entitie de la base de datos
add(Object obj): agrega un nuevo objeto a la base de datos
update(Object obj): actualiza un objeto existente en la base de datos
getLast(String key, Class type): obtiene el ultimo objeto del tipo class declarado agregado en la base de datos (según su orden interno) a partir de la clave pasada como parámetro.
byRestrictions(List restrictions, Class type): obtiene un objeto del tipo class declarado a partir de una lista de restricciones del tipo Criterion
listByRestrictions(List restrictions, Class type): obtiene una lista de objetos del tipo class declarado a partir de una lista de restricciones del tipo Criterion
withRestrictions(Map<String,Object> restrictions, Class type): obtiene una lista de objetos del tipo class declarado a partir de una lista de restricciones
withParams(Map<String,Object> restrictions,Class type): obtiene una lista de objetos del tipo class declarado a partir de una lista de restricciones
withRestrictionsLike(Map<String,Object> restrictions, Class type): obtiene una lista de objetos del tipo class declarado a partir de un mapa de restricciones con restricciones LIKE concatenados según el operador AND
byIdLike(String key, String value, Class type): mismo funcionamiento que el método "byId(...)" pero con el operador LIKE
allOrderBy(String key, OrderBy order, Class type): obtiene una lista de objetos del tipo class declarado ordenado de manera ascendente o descendiente
withRestrictionsOrderBy(Map<String,Object> restrictions,String key, OrderBy order, Class type): obtiene una lista de objetos del tipo class declarado a partir de un mapa de restricciones ordenado segun el objeto "order"
withRestrictions(List restrictions, Class type): obtiene una lista de objetos del tipo class declarado a partir de una lista de restricciones del tipo Criterion
callProcedure(String query, Map<String,Object> params): realiza una llamada de bajo nivel a la base de datos, muy útil para ejecutar procedimientos almacenados, seleccionar vistas u otras operaciones complejas
betweenDates(String field, Date first, Date second, Class type): obtiene una lista de objetos del tipo class declarado a partir de dos fechas. La tabla debe contener una columna de tipo date.
MIT
A los integrantes del equipo de Div-ID Software