Θα δημιουργήσουμε τις απαραίτητες κλάσεις-components, οι οποίες θα μας επιτρέπουν να ανακτούμε, να προσθέτουμε, να διαγράφουμε και να ενημερώνουμε εγγραφές των παραπάνω πινάκων.
Θα δημιουργήσουμε ένα package springeshop.repositories. Μέσα σε αυτό θα δημιουργήσουμε ένα repository CategoryRepository. Το Spring Data JPA παρέχει για εμάς την υλοποίηση της μεθόδου findByName(String name). Θα πραγματοποίησει το ερώτημα JPQL "Select c from Category c where name = :name".
package springeshop.repositories;
@Repository
public interface CategoryRepository extends JpaRepository<Category, Integer> {
Category findById(int id);
Category findByName(String name);
}
Δημιουργούμε το interface CategoryService στο springeshop.service. Περιέχει CRUD μεθόδους και μια μέθοδο, για την εύρεση προϊόντος, σύμφωνα με το όνομα.
package springeshop.service;
public interface CategoryService{
Category findById(int id);
Category findByName(String name);
void saveCategory(Category category);
void updateCategory(Category category);
void deleteCategoryById(int id);
boolean doesCategoryExist(Category category);
}
Δημιουργούμε την υλοποίηση του, CategoryServiceImpl
package springeshop.service;
@Service("categoryService")
@Transactional
public class CategoryServiceImpl implements CategoryService{
@Autowired(
private CategoryRepository categoryRepository;;
@Override(
public Category findById(int id) {
return categoryRepository.findById(id);
}
@Override(
public Category findByName(String name) {
return categoryRepository.findByName(name);
}
@Override(
public void saveCategory(Category category) {
categoryRepository.save(category);
}
@Override(
public void updateCategory(Category category) {
saveCategory(category);
}
@Override(
public void deleteCategoryById(int id) {
categoryRepository.deleteById(id);
}
@Override(
public boolean doesCategoryExist(Category category) {
return findByName(category.getName()) != null;
}
}
Δημιουργούμε ένα repository BrandRepository.
package springeshop.repositories;
@Repository
public interface BrandRepository extends JpaRepository<Brand, Integer> {
Brand findByName(String name);
}
Δημιουργούμε το interface BrandService στο springeshop.service.
package springeshop.service;
public interface BrandService{
Brand findByName(String name);
void saveBrand(Brand brand);
boolean doesBrandExist(Brand brand);
}
Δημιουργούμε την υλοποίηση του, BrandServiceImpl
package springeshop.service;
@Service("brandService")
@Transactional
public class BrandServiceImpl implements BrandService{
@Autowired(
private BrandRepository brandRepository;;
@Override(
public Brand findByName(String name) {
return brandRepository.findByName(name);
}
@Override(
public void saveBrand(Brand brand) {
brandRepository.save(brand);
}
@Override(
public boolean doesBrandExist(Brand brand) {
return findByName(brand.getName()) != null;
}
}
Δημιουργούμε ένα repository InventoryRepository.
package springeshop.repositories;
@Repository
public interface InventoryRepository extends JpaRepository<Inventory, Integer> {
@Query("select invent.quantity from Inventory invent where invent.product.id = :productid")
int findProductQuantity(@Param("productid") int productid);
}
Δημιουργούμε το interface InventoryService στο springeshop.service.
package springeshop.service;
public interface InventoryService{
int findProductQuantity(int productid);
void saveProductQuantity(Inventory productInventory);
}
Δημιουργούμε την υλοποίηση του, InventoryServiceImpl
package springeshop.service;
@Service("inventoryService")
@Transactional
public class InventoryServiceImpl implements InventoryService{
@Autowired(
private InventoryRepository inventoryRepository;
@Override(
public int findProductQuantity(int productid) {
return inventoryRepository.findProductQuantity(productid);
}
@Override(
public void saveProductQuantity(Inventory productInventory) {
inventoryRepository.save(productInventory);
}
}
Δημιουργούμε ένα repository ProductImageRepository.
package springeshop.repositories;
@Repository
public interface ProductImageRepository extends JpaRepository<ProductImage, Integer> {
ProductImage findByProductId(int id);
}
Δημιουργούμε το interface ProductImageService στο springeshop.service.
package springeshop.service;
public interface ProductImageService{
ProductImage findByProductId(int id);
void saveImage(ProductImage image);
}
Δημιουργούμε την υλοποίηση του, ProductImageServiceImpl
package springeshop.service;
@Service("imageService")
@Transactional
public class ProductImageServiceImpl implements ProductImageService{
@Autowired(
private ProductImageRepository imageRepository;
@Override(
public void saveImage(ProductImage image) {
imageRepository.save(image);
}
@Override(
public ProductImage findByProductId(int id) {
return imageRepository.findByProductId(id);
}
}