Buscar

07 - Complemento - NitridDB

Prévia do material em texto

17/10/2020 - no title specified
moodlep.ucv.edu.br/moodle/pluginfile.php/355946/mod_resource/content/0/07 - Complemento - NitriteDB.html 1/6
 
 
 
 
 
 
 
 
 
Complemento - NitriteDB
 
 
 
 
Rômulo Ferreira Douro
SIN2
Sumário
1 NitriteDB
1.1 Associando entidades
1.2 Pesquisas
 
1 NitriteDB
A base NoSQL usada como exemplo aqui possui uma boa
documentação a qual pode ser facilmente obtida em sua página na
internet: https://www.dizitart.org/nitrite-database/
Seguindo a documentação podemos fazer alterações no código.
https://www.dizitart.org/nitrite-database/
17/10/2020 - no title specified
moodlep.ucv.edu.br/moodle/pluginfile.php/355946/mod_resource/content/0/07 - Complemento - NitriteDB.html 2/6
1.1 Associando entidades
 A associação entre entidades é um recurso interessante pois gera a
combinação entre duas ou mais classes como a associação entre
tabelas em um banco de dados relacional.
A seguir mostramos o código da classe Pessoa
 
import java.util.Objects;
import org.dizitart.no2.IndexType;
import org.dizitart.no2.NitriteId;
import org.dizitart.no2.objects.Id;
import org.dizitart.no2.objects.Index;
import org.dizitart.no2.objects.Indices;
 
/**
*
* @author romulo
*
* classe de modelo que representa a entidade Pessoa
*/
@Indices({
@Index(value = "cpf", type = IndexType.Unique)//certifica que não podem haver CPF iguais no
banco
//,@Index(value = "nome", type = IndexType.Fulltext)//indice para prover pesquisa no banco pelo
campo nome
})
public class Pessoa {
 
/**
* a entidade pessoa tem dois atributos id que é a chave interna do banco de
* dados nome que representa o nome da pessoa
*/
@Id
public NitriteId id;
public String nome;
public String cpf;
 
@Override
public String toString() {
//return "Pessoa{" + "id=" + id.getIdValue() + ", nome=" + nome + '}';
return "id=" + id.getIdValue() + " Nome: " + nome + ", CPF: " + cpf;
}
 
/**
* méotodo usado na comparação entre dois objetos
* aqui, no caso, é verificada a igualdade da propriedade id
* @param obj
* @return
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
17/10/2020 - no title specified
moodlep.ucv.edu.br/moodle/pluginfile.php/355946/mod_resource/content/0/07 - Complemento - NitriteDB.html 3/6
return false;
}
final Pessoa other = (Pessoa) obj;
if (!Objects.equals(this.id, other.id)) {
return false;
}
return true;
}
 
 
}
 
E aqui o código da classe Carro que possui um campo do tipo
Pessoa indicando o proprietário do carro
 
import org.dizitart.no2.IndexType;
import org.dizitart.no2.NitriteId;
import org.dizitart.no2.objects.Id;
import org.dizitart.no2.objects.Index;
import org.dizitart.no2.objects.Indices;
 
/**
* representa a tabela carro
*
* @author romulo
*/
@Indices({
//evita a duplicidade de placas
@Index(value = "placa", type = IndexType.Unique)
})
public class Carro {
//gera automaticamente um id
//no momento da inserção no banco de dados
@Id
public NitriteId id;
public String placa;
public int ano;
public String modelo;
 
//indica uma associação entre as entidades Carro e Pessoa
public Pessoa dono;
 
@Override
public String toString() {
return "Carro{" + "id=" + id + ", placa=" + placa + ", ano=" + ano + ", modelo=" + modelo + '}';
}
 
}
 
 
1.2 Pesquisas
17/10/2020 - no title specified
moodlep.ucv.edu.br/moodle/pluginfile.php/355946/mod_resource/content/0/07 - Complemento - NitriteDB.html 4/6
As pesquisas são muito interessantes pois trazem um mecanismo
de obtenção de dados eficiente principalmente para a geração de
relatórios.
A seguir mostramos um exemplo de pesquisa simples onde apenas
são retornados em uma lista os dados cadastrados das pessoas
ordenadas pelo seu nome.
ordenacao = FindOptions.sort("nome", SortOrder.Ascending);
List<Pessoa> pessoas = BaseDados.rPessoas.find(ordenacao).toList();
((DefaultComboBoxModel) cbProp.getModel()).addAll(pessoas);
 
O próximo exemplo mostra um método que executa uma pesquisa
sobre os dados das pessoas cadastradas. Observe que é usada a
classe ObjectFilters para efetuar uma pesquisa usando uma
expressão regular1.
O código comentado iria executar um filtro retornando as pessoas
cujo nome inicia com um determinado valor enquanto o código em
uso (não comentado) executa um filtro retornando as pessoas cujo
nome contém um determinado valor. Nesse método é feita a
atualização de uma Jtable (aqui chamada tbPessoas) onde são
preenchidas as linhas com as propriedades ID, Nome e CPF para
cada registro retornado da pesquisa.
public void filtraTabelaGrafica(String procura) {
DefaultTableModel dtm = (DefaultTableModel) tbPessoas.getModel();
FindOptions opcoes = FindOptions.sort("nome", SortOrder.Ascending);
List<Pessoa> pessoas = BaseDados.rPessoas.find(
//ObjectFilters.regex("nome", "^(" + procura + ").*"),
ObjectFilters.regex("nome", ".*(" + procura + ").*"),
opcoes).toList();
dtm.setRowCount(0);
for (Pessoa p : pessoas) {
dtm.addRow(new Object[]{p.id, p.nome, p.cpf});
}
}
 
No exemplo a seguir, tem-se um método que retorna um Carro o
qual é obtido com uma pesquisa nos dados armazenados através do
seu ID. Vale ressaltar que, caso tenha sido salvo com um
proprietário (atributo dono) o mesmo também é recuperado!
public Carro selecionaCarro(NitriteId id) {
Carro carro = BaseDados.rCarros.getById(id);
return carro;
}
 
O próximo exemplo mostra um método que executa uma pesquisa
sobre os dados dos carros cadastrados. Aqui também é usada a
17/10/2020 - no title specified
moodlep.ucv.edu.br/moodle/pluginfile.php/355946/mod_resource/content/0/07 - Complemento - NitriteDB.html 5/6
classe ObjectFilters para efetuar uma pesquisa usando uma
expressão regular.
O código utiliza o conceito de AND pesquisando os registros que
possuem placa iniciada por um determinado valor E modelo iniciado
por um determinado valor. Nesse método também está sendo feita a
atualização de uma Jtable (aqui chamada tbCarros) onde são
preenchidas as linhas com as propriedades ID, Placa, Ano, Modelo e
Dono (toString da classe Pessoa) para cada registro retornado da
pesquisa.
public void filtraTabelaGrafica(String placa, String modelo) {
DefaultTableModel dtm = (DefaultTableModel) tbCarros.getModel();
dtm.setRowCount(0);
FindOptions ordenacao = FindOptions.sort("ano", SortOrder.Descending);
 
List<Carro> carros = BaseDados.rCarros.find(
ObjectFilters.and(
 ObjectFilters.regex("placa", "^(" + placa + ").*"),
 ObjectFilters.regex("modelo", "^(" + modelo + ").*")
),
ordenacao).toList();
 
for (Carro c : carros) {
String dono = c.dono != null ? c.dono.nome : "";
dtm.addRow(new Object[]{c.id, c.placa, c.ano, c.modelo, dono});
}
}
 
 
1.3 Exemplos de pesquisa
Segue aqui alguns exemplos de pesquisa usando REGEX
(Expressões Regulares):
 
//procura em qualquer posição fazendo distinção case sensitive
ObjectFilters.regex("nome", ".*(" + nomePesq + ").*"), 
//procura no início
ObjectFilters.regex("nome", "^(" + nomePesq + ").*"), 
//procura em qualquer posição sem distinguir case sensitive (maiúsculas ou 
//minúsculas
ObjectFilters.regex("nome", "(?i)" + nomePesq + "")
 
Para aprimorar o conhecimento pesquise na referência oficial
https://www.dizitart.org/nitrite-database/#filter
 
 
https://www.dizitart.org/nitrite-database/#filter
17/10/2020 - no title specified
moodlep.ucv.edu.br/moodle/pluginfile.php/355946/mod_resource/content/0/07 - Complemento - NitriteDB.html 6/6
 
 
 
 
1 https://regexr.com 
https://pt.wikipedia.org/wiki/Expressão_regular 
https://en.wikipedia.org/wiki/Regular_expression 
https://aurelio.net/regex/
https://regexr.com/
https://pt.wikipedia.org/wiki/Express%C3%A3o_regular
https://en.wikipedia.org/wiki/Regular_expression
https://aurelio.net/regex/

Continue navegando