2016-04-06 4 views
0

Seit einiger Zeit habe ich mit den folgenden direkt in Serviceklassen:Was der funktionale Unterschied zwischen der Verwendung eines EntityManager direkt und JpaRepository

@Repository 
public interface PersonRepository extends JpaRepository<Person, Long> { 
} 

Als Alternative könnte ich eine AbstractDao durch eine PersonDao erweitert bauen. Diese Klassen verwenden würden die EntityManager

public abstract class AbstractDao<PK extends Serializable, T> { 

    private final Class<T> persistentClass; 

    @SuppressWarnings("unchecked") 
    public AbstractDao(){ 
     this.persistentClass =(Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[1]; 
    } 

    @PersistenceContext 
    EntityManager entityManager; 

    public T findByKey(PK key) { 
     return entityManager.find(persistentClass, key); 
    } 

    public List<T> findAll() { 
     return entityManager.createQuery("from " + persistentClass.getName()).getResultList(); 
    } 

    public void save(T entity){ 
     entityManager.persist(entity); 
    } 

Gibt es einen funktionellen Unterschied zwischen diesen Ansätzen - anders als mehr Code in dem später? Was würde mich dazu bringen, einen über den anderen zu wählen?

Antwort

1

Die Federdaten in diesem Fall decken ab, was Sie im zweiten Beispiel haben. Andere Frameworks haben einen ähnlichen Ansatz, um den EntityManager zu verbergen und Ihnen eine Out-of-the-Box-API bereitzustellen.

Es gibt keinen Unterschied (unter Berücksichtigung nur der Ergebnisse) zwischen zwei Ansätze und sogar Ihre Notiz anders als mehr Code in der späteren? ist nicht wahr, da ich sicher bin, dass jedes Framework Tonnen von Codezeilen hinter sich haben wird, um die Operationen zu unterstützen. :)

+0

Also das erste Code-Segment ist der am besten geeignete Ansatz bei der Verwendung von Spring? – skyman

+0

Nicht wirklich _most appropriate_. Wir könnten eine Analogie von Ihnen haben, die Sie herumfahren möchten, können Sie ein Auto (Frühlingsdaten oder andere Rahmenwerke) kaufen, oder Sie können die Bits kaufen und Ihr Auto zusammenstellen. Jeder Fall ist ein Fall. Ich benutze den Frühling für alle meine Entwicklung, nur weil es direkt aus der Box funktioniert, aber auch, weil ich auch für bestimmte Fälle konfigurieren kann. Sie müssen möglicherweise etwas schnell hoch, dann Frameworks sind der Weg zu gehen, aber Sie benötigen möglicherweise auch etwas sehr Spezifisches, so dass Sie Ihre eigenen bauen müssen. – Desorder

+0

Vielen Dank für Ihre Antwort - es ist sehr hilfreich. Ich habe langsam mein Wissen und meine Wertschätzung für den Frühling aufgebaut. – skyman

Verwandte Themen