Is it possible when create an abstract class to store basic CRUD and handle them so that service just need to extend

Viewed 37

after working on some pet project for beginner. I realize that all of my projects use CRUD as its basic operation for each service. So, I think that I can using Generic to create an interface for CRUD operation, and then using abstract class to implement and provide basic logic for it. Then, with all service in my project, I can let them extend the abstract class and implement the CRUD service and whenever I want to have CRUD operation in one service, I can just call super. from the abstract class instead of write the logical code for it.

   

     public interface BasicService<T>{
    1. T add(T model);
    2. T update(T model, int id);
    3. void delete(int id);
    4. T getById(int id);
    }

    @Repository
        public interface BasicRepository<T> extends JpaRepository<T, Integer>{
        }
    public interface CarService extends BasicService<Car>{
    }

        public abstract class  BasicServiceImpl<T> implements BasicService<T>{
        
            private final BasicRepository<T> basicRepository;
            
            public BasicServiceImpl(BasicRepository<T> basicRepository){
                    this.basicRepository = basicRepository;
            }
        
        @Override
            public T getById(int id){
                basicRepository.findById(id)
            }
        
            @Override
            @Transactional
            public ResponseEntity<?> delete(int id){
                this.basicRepository.deleteById(id);
            }
        
            @Override
            public T update(T model, int id){
                return this.basicRepository.save(model);
            }
        
            @Override
            public T add(T model){
                return this.basicRepository.save(model);
            }
    }

    @Service
    public CarServiceImpl extends BasicServiceImpl<Car> implement CarService{
    private CarRepository carRepository;
    
    @Autowired
    public CarServiceImpl(CarRepository carRepository){
    super(carRepository);
    }
    
    @Override
    public Car getById(int id){
    return super.getById(id);
    }
    
    @Override
    public Car add(Car model){
    return super.add(model);
    }
    }






0 Answers
Related