Baixe o app para aproveitar ainda mais
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/
Compartilhar