2014-07-21 16 views
6

Buduję małą aplikację przy użyciu Spring i Spring Data JPA i potrzebuję użyć metod CrudRepository w warstwie service, więc zrobiłem 2 klasy: GenericService i GenericServiceImpl. Ale nie wiem, czy to jest właściwe, czy nawet najlepsze podejście.Metody Crud w warstwie usług przy użyciu Spring Data JPA

Oto przykład:

POJO:

@Entity 
public class User { 

    @Id 
    private Long id; 

    private String username; 
} 

DAO:

public interface UserDAO extends CrudRepository<User, Long> { 
    User findOneByUsername(String username); 
} 

Generic serwis

public interface GenericService<T, ID extends Serializable> { 
    <S extends T> S save(S entity); 
} 

usługi

public interface UserService extends GenericService<User, Long> { 
    User findOneByUsername(String username); 
} 

Ogólna usługa imp.

public class GenericServiceImpl<T, ID extends Serializable> implements GenericService<T, ID> { 

    @Autowired 
    private CrudRepository<T, ID> repository; 

    @Override 
    public <S extends T> S save(S entity) { 
     return repository.save(entity); 
    } 
} 

Serwis Impl.

@Service 
@Transactional 
public class UserServiceImpl extends GenericServiceImpl<User, Long> implements UserService { 

    @Autowired 
    private UserDAO userDAO; 

    @Override 
    public User findOneByUsername(String username) { 
    userDAO.findOneByUsername(username); 
    } 
} 
+0

Dlaczego robisz wszystko z tym ręcznym delegacji zamiast korzystać bezpośrednio interfejsy repozytorium? – chrylis

+0

Co rozumiesz przez "używanie interfejsów repozytorium direclty"? Próbowałem zrobić coś takiego [Spring i Autowiring of Generic Types] (http://www.jayway.com/2013/11/03/spring-and-autowiring-of-generic-types/) – jonas

+0

Mam na myśli autowire Twój 'CrudRepository' bezpośrednio w kodzie, który manipuluje obiektami zamiast mieć oddzielną hierarchię usług, która tylko ją replikuje. – chrylis

Odpowiedz

Powiązane problemy