Open Jacobvu84 opened 2 years ago
Cách 2 Sử dụng những hàm sẵn có trong JpaRepository
Chúng ta viết thêm hàm findById trong ProductRepository
. Theo convention chúng ta cần đặt tên hàm đúng theo quy định của Spring. Bắt đầu bằng tiền tố findBy theo sau là tên thuộc tính của Entity.
Điều này rất nhanh giúp chúng ta có được hàm findByProductId mà không cần implement thêm gì.
Thế mới gọi là frameowork chứ. Nếu ko cái gì cũng làm từ đầu như "My framework" thì còn gọi gì là framework nữa. 🥇
public interface ProductRepository extends JpaRepository<Product, Long> {
// Name method needs to follow convention: findBy<nameAttribute>
List<Product> findByName(String name);
List<Product> findByProductId(Long id);
}
Đưới đây là đoạn code để update thông tin cho một product.
@PutMapping("/{id}")
ResponseEntity<ResponseObject> updateProduct(@RequestBody Product newProduct, @PathVariable Long id){
Optional<Object> foundProduct = repository.findById(id).map(
product -> {
product.setName(newProduct.getName());
product.setPrice(newProduct.getPrice());
product.setYearOfManufacture(newProduct.getYearOfManufacture());
product.setUrl(newProduct.getUrl());
return repository.save(product);
}
);
return foundProduct.isPresent() ?
ResponseEntity.status(HttpStatus.OK).body(
new ResponseObject("ok", "Update product successfully", foundProduct)
):
ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).body(
new ResponseObject("failed", "product not found", "")
);
}
Dữ liệu test dùng cho Postman
{
"name": "BPhone Pro",
"yearOfManufacture": 2500,
"price": 5000,
"url": ""
}
Ta dùng Optional<Product>
vì tránh trường hợp không tìm thấy record product nào trong database nó sẽ trả về tham chiếu Null, điều này sẽ dẫn đến một NullPointerException. Để ngăn chặn điều này chúng ta có thể dùng Optional (java8)
Optional là một container cho phép chứa một giá trị vắng mặt.