Como o instrutor não fez o update e o delete, para ficar completão eu fiz e vou disponibilizar, vlw ``` public interface FuncionarioService { public Funcionario alterar(String id, Funcionario funcionario); public void deletar(String id); } ``` OBS. Eu implementei uma exception que a utilizei para caso não encontre o id do funcionário ``` public class FuncionarioNotFoundException extends RuntimeException{ public FuncionarioNotFoundException(String id){ super("Funcionário com ID " + id + " não encontrado."); } } ``` ``` @Service public class FuncionarioServiceImpl implements FuncionarioService { @Override public Funcionario alterar(String id, Funcionario funcionario) { return funcionarioRepository.findById(id) .map(existingFuncionario -> { funcionario.setId(id); return funcionarioRepository.save(funcionario); }) .orElseThrow(() -> new FuncionarioNotFoundException(id)); } @Override public void deletar(String id) { funcionarioRepository.findById(id).ifPresentOrElse( funcionario -> funcionarioRepository.deleteById(id), () -> { throw new FuncionarioNotFoundException(id); }); } } ``` ``` public class FuncionarioController { @PutMapping("/{id}") public Funcionario alterarFuncionarioPorId(@PathVariable String id, @RequestBody Funcionario funcionario){ return funcionarioService.alterar(id, funcionario); } @DeleteMapping("/{id}") public void deletarFuncionarioPorId(@PathVariable String id){ funcionarioService.deletar(id); } } ``` Agora está completão a API. Pra quem quiser eu add a query abaixo para buscar nomes com as iniciais especificadas, independentemente de estarem em maiúsculas ou minúsculas: @Query("{'nome': {$regex : ?0, $options: 'i'}}") public List findByNome(String nome);
Muito bom Willian, vc poderia criar uma aplicação de test para chamar uma api externa pegando o client oauth2, você explica muito bem, parabéns, Gratidão!!!
Como vai William, gostei muito deste curso... Olhei o curso todo e agora vou procurar colocar em prática usando o Spring tool suite e os frameworks que vc descreveu... Se eu tiver dúvidas, vou perguntar, ok? Eu já fiz outro curso da Algaworks e gostei também...
Bom dia. Muito boa a vídeo-aula. Porém, estou tendo dificuldade com relação aos imports: por exemplo, o STS4 não está reconhecendo "import org.springframework.data.mongodb.repository.MongoRepository". Eu adicionei os 4 starters. Alguma dica? Muito obrigado.
Olá não to conseguindo fazer com que minha aplicação se conecte ao mongodb, ela informa um erro na URL que ele não a encontra. Por favor onde posso tirar as minhas duvidas?
Quando eu envio um objecto "Funcionario" para API, ela näo me retorna o novo Funcionario criado mesmo com a notacao @RequestBody no Metodo, fiz uma consulta dentro do proprio MongoDB através 3T e lá ele cria um registro diferente, apenas com 2 campos ID e Class Funcionario e esse classe funcionário nöao é um JSON com os atributos que compoem a propria classe Funcionario. Que estranho, até agora nao entendi o porque disso.
Verificou se os getters e setters da sua classe funcionario estao ok? Voce esta utilizando lombok conforme o video ? Se sim Verifique se a anotação @Data esta presente na sua classe Funcionario. Abraços
Olá @@amonlara1350, eu estou usando sim a dependência lombok e a Classe tem anotação @Data sim. mas sinceramente agora aqui também pensando, só poderia mesmo ser isso. Assim que eu voltar a mexer nesse projeto, vou rever isso, muito Obrigado.
Uma dúvida com relação ao editar. No caso se eu precisasse criar um endpoint do tipo Put, e quisesse alterar somente um valor da classe chefe, como por exemplo o salario dele. Eu teria que enviar todos os dados de funcionario e do chefe pra editar um atributo? Ou se eu enviar somente o salario do chefe modificado ele entenderia e alteraria no documento do Mongo? Pergunto isso pq estou iniciando no NoSql e estou sentindo bastante difirença do SQL hehe.
Parabéns, muito didático e útil esse conteúdo.
Muito boa explicação William. Parabéns. Eu não conhecia MongoDB. Facilitou muito meu entendimento!
Ótima aula, muito obrigado!
Como o instrutor não fez o update e o delete, para ficar completão eu fiz e vou disponibilizar, vlw
```
public interface FuncionarioService {
public Funcionario alterar(String id, Funcionario funcionario);
public void deletar(String id);
}
```
OBS. Eu implementei uma exception que a utilizei para caso não encontre o id do funcionário
```
public class FuncionarioNotFoundException extends RuntimeException{
public FuncionarioNotFoundException(String id){
super("Funcionário com ID " + id + " não encontrado.");
}
}
```
```
@Service
public class FuncionarioServiceImpl implements FuncionarioService {
@Override
public Funcionario alterar(String id, Funcionario funcionario) {
return funcionarioRepository.findById(id)
.map(existingFuncionario -> {
funcionario.setId(id);
return funcionarioRepository.save(funcionario);
})
.orElseThrow(() -> new FuncionarioNotFoundException(id));
}
@Override
public void deletar(String id) {
funcionarioRepository.findById(id).ifPresentOrElse(
funcionario -> funcionarioRepository.deleteById(id),
() -> {
throw new FuncionarioNotFoundException(id);
});
}
}
```
```
public class FuncionarioController {
@PutMapping("/{id}")
public Funcionario alterarFuncionarioPorId(@PathVariable String id, @RequestBody Funcionario funcionario){
return funcionarioService.alterar(id, funcionario);
}
@DeleteMapping("/{id}")
public void deletarFuncionarioPorId(@PathVariable String id){
funcionarioService.deletar(id);
}
}
```
Agora está completão a API.
Pra quem quiser eu add a query abaixo para buscar nomes com as iniciais especificadas, independentemente de estarem em maiúsculas ou minúsculas:
@Query("{'nome': {$regex : ?0, $options: 'i'}}")
public List findByNome(String nome);
Excelente!
Muito bom Willian, vc poderia criar uma aplicação de test para chamar uma api externa pegando o client oauth2, você explica muito bem, parabéns, Gratidão!!!
Olá Elias, temos isso na nossa aula sobre spring authorization server
Mandou muito, obrigado!
Muito bom, ficou totalmente transparente, até parece a utilização de um banco relacional com poucas alterações.
AlgaWorks sempre mostrando uma coisa dificil se tornar fácil alem de explicar os conceitos muito BOM, PARABENS
Muito bom o seu video. Direto, objetivo e com informações relevantes.
Já cheguei sentando o like!!
Estou louco pela por ter uma bolsa de estudos na AlgaWorks srsr.
Poxa, valeu de mais Paulo! Logo logo nos vemos nos cursos :D
Excelente abordagem do Spring com o MongoDB, Will! Agora é sair da zona de conforto dos SQL pro NoSQL heheje Da hora!
Poxa, muito obrigado mesmo!!! Isso ai, agora é treinar e inovar nos projetos :D
Muito bom!! Salvou minha vida, muito obrigada.
Conteúdo muito bom!
Excelente material, expressado de uma forma muito didática! Parabéns ao instrutor!
Como vai William, gostei muito deste curso...
Olhei o curso todo e agora vou procurar colocar em prática usando o Spring tool suite e os frameworks que vc descreveu...
Se eu tiver dúvidas, vou perguntar, ok?
Eu já fiz outro curso da Algaworks e gostei também...
Já sentei o dedo no like
Parabéns pelo excelente conteúdo!!!
Poxa, muito obrigado mesmo João Paulo!
Excelente vídeo, direto ao ponto e bem explicado, parabéns
Irmao, parabens pelo conteudo!
Boa didática. Teria mais algum material, vídeo ou curso referente MongoDB com Spring Data? Teria material aprofundando-se sobre consultas?
Opa, muito bom vídeo, você tem esse projeto pra clonar o repositório e deixar aqui pra estudo?
Excelente, muito foda.
Bom dia. Muito boa a vídeo-aula. Porém, estou tendo dificuldade com relação aos imports: por exemplo, o STS4 não está reconhecendo "import org.springframework.data.mongodb.repository.MongoRepository". Eu adicionei os 4 starters. Alguma dica? Muito obrigado.
Olá não to conseguindo fazer com que minha aplicação se conecte ao mongodb, ela informa um erro na URL que ele não a encontra. Por favor onde posso tirar as minhas duvidas?
Como tratar performance de n+1 usando essa lib?
Muito bom. Fiquei com uma dúvida no Lombok. Você usa a anotação @Data, não precisa especificar qual é a chave do Equals e Hashcode?
Olá Danilo!
Para esse exemplo não adicionei, pela simplicidade do mesmo. Mas é sempre uma boa prática especificá-los sim.
Como ficaria a query se fosse buscar por nome ?
Quando eu envio um objecto "Funcionario" para API, ela näo me retorna o novo Funcionario criado mesmo com a notacao @RequestBody no Metodo, fiz uma consulta dentro do proprio MongoDB através 3T e lá ele cria um registro diferente, apenas com 2 campos ID e Class Funcionario e esse classe funcionário nöao é um JSON com os atributos que compoem a propria classe Funcionario. Que estranho, até agora nao entendi o porque disso.
Verificou se os getters e setters da sua classe funcionario estao ok? Voce esta utilizando lombok conforme o video ? Se sim Verifique se a anotação @Data esta presente na sua classe Funcionario. Abraços
Olá @@amonlara1350, eu estou usando sim a dependência lombok e a Classe tem anotação @Data sim. mas sinceramente agora aqui também pensando, só poderia mesmo ser isso. Assim que eu voltar a mexer nesse projeto, vou rever isso, muito Obrigado.
Aqui tb deu o mesmo erro.. estudando sobre lombok parace que a comunidade nao recomenda. O melhor mesmo é usar o jeito antigo que funciona.
Daria pra mesclar sem problemas um projeto com NoSQL e SQL?
Olá Patrick!
Com certeza, dá pra mesclar sim.
Uma dúvida com relação ao editar. No caso se eu precisasse criar um endpoint do tipo Put, e quisesse alterar somente um valor da classe chefe, como por exemplo o salario dele. Eu teria que enviar todos os dados de funcionario e do chefe pra editar um atributo? Ou se eu enviar somente o salario do chefe modificado ele entenderia e alteraria no documento do Mongo? Pergunto isso pq estou iniciando no NoSql e estou sentindo bastante difirença do SQL hehe.
Resolvido.
💯👏👏👏👏👏
Faz com Webflux.
Olá Denilson! Já está anotado a sugestão
Estou tendo problemas com o findById, alguem mais está tendo esse problema?
se alguem passar por aqui, provavelmente voce colou outro tipo no repository diferente de string.
@@FelipeVieira39 ele deve ter colocado Long mesmo, a id do Mongo tem que ser String. É um Hash e não um autoincremento como em banco relacionais...