CRUD - método READ
Prof. Me. Danilo Bueno
layout: image image: ./images/itpweb2.crud-fuck.png backgroundSize: contain title: crud-fuck image
Operação CREATE
O método save recebe um objeto User e salva no banco de dados:
@Transactional
public void save(User user) {
String sql = "INSERT INTO user (email, password)
VALUES (:nome, :email)";
Query query = em.createNativeQuery(sql);
query.setParameter("nome", user.getEmail());
query.setParameter("email", user.getPassword());
query.executeUpdate();
}
- Esse método faz a utilização dos parametros nomeados
:nomee:email;
Operação READ
-
A operação Read é utilizada para recuperar registros do banco de dados.
-
Geralmente utilizada em duas versões:
- Find All: Recupera TODOS os registros da tabela
- Find By ID: Recupera UM registro específico da tabela
Repositório: método findAll
O método findAll retorna todos os usuários de uma tabela
@Repository
public class UserRepository {
@PersistenceContext
private EntityManager em;
public List<User> findAll() {
String sql = "SELECT * FROM user";
Query q = em.createNativeQuery(sql, User.class);
List<User> users = q.getResultList();
return users;
}
}
Como utilizar o método findAll?
Podemos usar o repositório para recuperar todos os registros de uma tabela.
@Controller
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/users")
public String list(Model model) {
List<User> users = userRepository.findAll();
model.addAttribute("users", users);
return "list.html";
}
}
Repositório: método findById
O método findById retorna um usuário específico do banco de dados:
public User findById(int id) {
String sql = "SELECT * FROM user WHERE id = :id";
Query q = em.createNativeQuery(sql, User.class);
q.setParameter("id", id);
User user = (User) q.getSingleResult();
return user;
}
Explicando o código
Método findById
- O método
findByIdrecebe um parâmetroidque é utilizado para recuperar um usuário específico. - A consulta SQL é criada utilizando a classe
Querye o métodocreateNativeQuery(). - O método
setParameter()é utilizado para passar o valor do parâmetroid. - O método
getSingleResult()é utilizado para retornar um único resultado.
Como usar o método findById
- Para utilizar o método
findByIdé necessário passar oiddo usuário que deseja recuperar:
User user = userRepository.findById(1);
- O método
findByIdretorna um objetoUsercom os dados do usuário recuperado. - O objeto
Useré utilizado para exibir os dados do usuário na página.
Como receber o id na requisição
- Para receber o
idna requisição é necessário utilizar a anotação@PathVariable:
@GetMapping("/users/{id}")
public String show(@PathVariable int id, Model model) {
User user = userRepository.findById(id);
model.addAttribute("user", user);
return "users/show.html";
}
- A anotação
@PathVariableé utilizada para receber oidna requisição. - O
idé passado como parâmetro do métodoshowe utilizado no métodofindById. - O objeto
Useré adicionado ao modelo e retornado para a página. - A página
show.htmlé utilizada para exibir os dados do usuário.
Como enviar o id na requisição
- Para enviar o
idna requisição é necessário utilizar a tagth:href:
<a th:href="@{/users/{id}(id=${user.id})}">Show</a>
- A tag
th:hrefé utilizada para enviar oidna requisição. - O
idé passado como parâmetro da URL e utilizado no métodofindById. - O
idé recuperado na requisição e utilizado para recuperar o usuário.