Eu fiz um projeto simples há algum tempo e não conhecia DTO/record naquela época. No entanto, gostaria de saber se a abordagem que utilizei estava incorreta ou menos segura do que se tivesse utilizado DTO/record. Também gostaria de saber como poderia implementar DTO/record neste exemplo abaixo e como seria o código resultante.
Além disso, gostaria de saber também como usar a arquitetura do tipo repository e model com o record.
@RestController
@RequestMapping("/users")
public class LivrosController {
@Autowired
private UserRepository userRepository;
@GetMapping("/1")
public String olaMundo(){
return "hello world ";
}
@GetMapping("/{id}")
public User getLivros(@PathVariable("id") Long id) {
System.out.println("O id é " + id);
Optional<User> userFind = this.userRepository.findById(id);
if (userFind.isPresent()) {
return userFind.get();
}
return null;
}
@PostMapping("/")
public User user(@RequestBody User user){
System.out.println(user.getId());
return this.userRepository.save(user);
}
@GetMapping("/Lista")
public List<User> lista(){
return this.userRepository.findAll();
}
@GetMapping("/lista/{id}")
public List<User> listMoreThan(@PathVariable("id") Long id){
return this.userRepository.findByIdGreaterThan(id);
}
@GetMapping("/findByName/{name}")
public List<User> findByName(@PathVariable("name") String name){
return this.userRepository.findByNameIgnoreCase(name);
}
}
package com.apiTestePrimeiro.apiTestePrimeiro.model;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.web.bind.annotation.RequestMapping;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "nome")
private String name;
private String username;
}
package com.apiTestePrimeiro.apiTestePrimeiro.repository;
import com.apiTestePrimeiro.apiTestePrimeiro.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface UserRepository extends JpaRepository<User, Long> {
//no exemplo a baixo usamos a possibilidade de inserir uma query da nossa preferencia
@Query("SELECT u from User u where u.id > :id")
public List<User> findAllMoreAThan(@Param("id") Long id);
//no exemplo a baixo usamos uma palavra reservada proria do spring data, que tem o mesmo funcionamento do exemplo acima
public List<User> findByIdGreaterThan(Long id);
public List<User> findByNameIgnoreCase(String name);
}