Como todos los que leen saben, soy un fiel y entusiasta usuario de MongoDB.
Actualmente estoy desarrollando un sistema Web para la universidad de la que fui alumno (soy egresado ya
), usando Java y MongoDB.
Si ya han buscado información, seguramente saben que para insertar documentos se tiene que usar el “coleccion.put(“Nombre”, nom)”. Y si bien funciona… no es muy bonito que digamos.
En VB .NET (también hago aplicaciones con Mongo en .NET) para guardar documentos simplemente enviaba una clase directamente y el driver se encarga solito de serializar la clase.
Pero en Java no encontraba por ninguna parte como hacer esto… Así que buscando y buscando, llegué a la solución usando una librería llamada Morphia
Entonces, supongamos que tenemos una clase llamada Alumno con lo típico (Id, Rut, Nombre, Fecha_Registro), y la creamos de la siguiente manera:
import com.google.code.morphia.annotations.Entity;
import com.google.code.morphia.annotations.Id;
import java.util.Date;
import org.bson.types.ObjectId;
@Entity
public class Alumno {
@Id private ObjectId id;
private String Nombre,
Rut_L,
Pass;
private Date Registro;
private Integer Rut;
//Setters y Getters
}
Con esto tenemos lo necesario. Morphia se encarga de mapearlo al anotar el “@Entity” sobre la clase.
Ahora creamos un nuevo alumno y le metemos los datos. Algo así:
private Boolean NuevoUsuario(Integer _id, String nom, String app, String apm,
String rut, String pass){
Alumno a = new Alumno();
a.setNombre(nom + " " + app + " " + apm);
a.setPass(pass);
a.setRut(_id);
a.setRut_L(rut);
//...
Tenemos listo nuevo alumno, y seguimos con Morphia para que se encargue de guardar el objeto en la BD
Morphia morphia = new Morphia();
morphia.map(Alumno.class);
Datastore ds = morphia.createDatastore(MongoConnection.getInstance().getConnection(),
MongoConnection.getInstance().getDatabase().getName());
ds.save(a);
Como se ve, lo primero es mapear la instancia con la clase que queremos ingresar. Luego usamos un Datastore (interfaces para leer, actualizar o guardar la info) con la conexión a Mongo y el nombre de la BD que queremos usar (OJO que estoy usando una singleton). Por último, guardamos al alumno.
Con esto el código queda más elegante
y la podemos ver en la shell con esta estructura.
Para leer, es igual de simple
Morphia morphia = new Morphia();
Datastore ds = morphia.createDatastore(MongoConnection.getInstance().getConnection(),
MongoConnection.getInstance().getDatabase().getName());
Alumno a = ds.find(Alumno.class, "Rut", u).get();
Si se fijan, es lo mismo. En la 3º línea definimos el cómo se comportará el Datastore y por cuál parámetro vamos a buscar.
Eso si, el Datastore.find() devuelve un List, a menos que usemos el .get() que devuelve el primer resultado que encuentre (por lo que los controles de si se repite o no un documento corre por cuenta nuestra). Si el find() no encuentra nada, devuelve un null.
Eso es todo
Dejo todos los archivos que ocupé en una carpeta en SkyDrive
Links
- QuickStart de Morphia
- Descarga del jar, sources y JavaDoc (versión 0.99 es la más actual)
- Todos los archivos usados (carpeta SkyDrive)











