Nitrite: un database embedded NoSQL per Java
Nitrite è un database embedded di tipo NoSQL scritto in Java; è quindi perfetto per le nostre applicazioni scritte in questo linguaggio che richiedono un db di questo tipo.
Non è molto difficile da usare, ed è anche possibile usarlo dentro applicazioni Android (ne vedremo un esempio in un altro articolo); infine, è usabile anche in Kotlin.
Detto ciò, vediamo come usarlo; se usate Maven:
<dependency>
<groupId>org.dizitart</groupId>
<artifactId>nitrite</artifactId>
<version>3.0.0</version>
</dependency>
Guardando alla documentazione, notiamo che possiamo usarlo in due modi:
- creando un document
- usando una classe POJO
Io lo sto usando nella seconda maniera, e quindi vediamo un esempio in questo senso.
Questa la mia classe POJO:
import org.dizitart.no2.IndexType;
import org.dizitart.no2.objects.Id;
import org.dizitart.no2.objects.Index;
import org.dizitart.no2.objects.Indices;
import java.io.Serializable;
import java.util.Date;
@Indices(value = {
@Index(value = "data", type = IndexType.NonUnique),
@Index(value = "titolo", type = IndexType.Unique)
})
public class Nota implements Serializable {
@Id
private long notaId;
private String titolo;
private String testo;
private Date data;
public long getNotaId() {
return notaId;
}
public void setNotaId(long notaId) {
this.notaId = notaId;
}
public String getTitolo() {
return titolo;
}
public void setTitolo(String titolo) {
this.titolo = titolo;
}
public String getTesto() {
return testo;
}
public void setTesto(String testo) {
this.testo = testo;
}
public Date getData() {
return data;
}
public void setData(Date data) {
this.data = data;
}
}
Come potete vedere usimo le annotations per creare gli indici (univoci e non) e per indicare il campo ID.
Questa la classe che esegue la creazione del db (un file su filesystem), popola il db e lo va leggere:
import org.dizitart.no2.Nitrite;
import org.dizitart.no2.exceptions.UniqueConstraintException;
import org.dizitart.no2.objects.Cursor;
import org.dizitart.no2.objects.ObjectRepository;
import java.util.Date;
public class DBNotes {
public void createDb() {
try {
Nitrite db = Nitrite.builder()
.compressed()
.filePath("notes.db")
.openOrCreate("matte", "9211");
ObjectRepository<Nota> rep = db.getRepository(Nota.class);
for (int i = 0; i < 10; i++) {
Nota n = new Nota();
n.setNotaId(i);
n.setTitolo("TITOLO " + i);
n.setTesto("Ciao, questo è il testo numero " + i);
n.setData(new Date());
rep.insert(n);
}
System.out.println(rep.size());
Cursor<Nota> nota = rep.find();
for (Nota n : nota) {
System.out.println(n.getTesto());
}
Nota doppia = new Nota();
doppia.setTitolo("TITOLO " + 0);
rep.insert(doppia);
} catch (UniqueConstraintException ex) {
System.out.println(ex.getMessage());
} catch (NullPointerException ex) {
System.out.println("Nessun valore trovato!");
} finally {
System.exit(0);
}
}
}
Come vedete, provo a fare anche un inserimento manuale di un valore già esistente (chiave univoca); vedrete che il programma andrà in eccezione (che ho intercettato).
Enjoy!
java database nosql nitrite maven
Commentami!