Spring CrudRepository

Spring CrudRepository
0

Witam,
mam pytanie odnosnie springowego CrudRepository. Chodzi oczywiscie o JPA. Znalazlem na internecie kilka przykladow zastosowania tego interfejsu, ale nigdzie w przykladach nie widze implementacji i zastanawiam sie jak to dziala :)?

Czy to sa nie kompletne przykłady czy może implementacja jest jakos zaszyta rowniez w springu chociaz nie wiem jakby to mialo dzialac.

hcubyc
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 3 lata
0

Limitations are limitless > ##### Ola Nordmann napisał(a)
> Moim językiem ojczystym jest C++ i proszę uszanować to, że piszę po polsku.
edytowany 1x, ostatnio: hcubyc
0
hcubyc napisał(a):

http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html
może chodzi o to?
do tego może drugi link z googla: http://stackoverflow.com/questions/14014086/what-is-difference-between-crudrepository-and-jparepository-interfaces-in-spring

No tak, o to mi chodzi, ale to są same interfejsy, a chciałem zobaczyć poszczególne implementacje tych metod zdefiniowanych w interfejsie.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Spring Data generuje implementacje w locie na bazie interfejsu.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
ccu
Kurde, dwa łyki kawy się spóźniłem :)
ccu
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Warszawa
  • Postów:11
1

Ta są kompletne przykłady.

Krótki wyciąg z http://projects.spring.io/spring-data/:

Launch your app and Spring Data (having been autoconfigured by Boot, SQL or NoSQL) will automatically craft a concrete set of operations:

save(Employee)
delete(Employee)
find(Employee)
find(Long)
findAll()
TK
  • Rejestracja:ponad 13 lat
  • Ostatnio:około miesiąc
  • Postów:342
1

Nie musisz tworzyc implementacji aby miec mozliwosc korzystania z repozytorium Springa. Zrob sobie wlasny interfejs repozytorium, ktore dziedziczy z tego interfejsu CrudRepository a reszte zrobi Spring.

Jak bedzie Ci potrzebna nowa metoda w repozytorium to ja po prostu dopisz do interfejsu. Jezeli nazwa metody bedzie odpowiednio skonstruowana to Spring sie domysli co chcesz zrobic z baza danych. Dla przykladu, jezeli masz encje UserEntity ktora zawiera id (klucz podstawowy, zalozmy ze typu Long) to mozesz w repozytorium uzytkownikow sobie napisac metode

Kopiuj
UserEntity findOneById(Long id);

Spring na podstawie nazwy metody domysli sie, ze chcesz pobrac uzytkownika o danym identyfikatorze. Zobacz sobie rozdzial 3.3.2 dokumentacji: http://docs.spring.io/spring-data/jpa/docs/1.7.1.RELEASE/reference/html/#jpa.query-methods.query-creation

Jezeli chcesz wyciagnac dane z bazy w troche bardziej skomplikowany sposob to zawsze mozesz sobie stworzyc zapytanie JPQL lub nawet SQL za pomoca adnotacji Query (rozdzial 3.3.4)

Natomiast jezeli juz koniecznie potrzebujesz funkcjonalnosci, ktore wymagaja implementacji to zerknij na rozdzial 2.6.

edytowany 2x, ostatnio: tk
0
tk napisał(a):

Nie musisz tworzyc implementacji aby miec mozliwosc korzystania z repozytorium Springa. Zrob sobie wlasny interfejs repozytorium, ktore dziedziczy z tego interfejsu CrudRepository a reszte zrobi Spring.

Dzięki, troche mi to rozjaśniło sprawę.

W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 minut
  • Postów:3595
0

Jak to działa? Takie mam podejrzenie:

  • przy skanie komponentów, Spring sprawdza, czy coś jest Spring CRUD repository czy nie
  • jeśli tak, to za pomocą javassista czy czegoś do manipulowania bytecodem tworzy implementację, ergo - nie trzeba się martwić o implementację
ccu
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Warszawa
  • Postów:11
0

W miejsce referencji do interfejsu repozytorium wstrzykiwana jest generyczna implementacja org.springframework.data.jpa.repository.support.SimpleJpaRepository.

To ci siedzi pod spodem najłatwiej obadać zatrzymując się debuggerem.

edytowany 1x, ostatnio: ccu
bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0
JavaStarter napisał(a):

Czy to sa nie kompletne przykłady czy może implementacja jest jakos zaszyta rowniez w springu chociaz nie wiem jakby to mialo dzialac.

Tu masz przykład aplikacji wykorzystującej Spring Data:
https://github.com/DanielMichalski/spring-web-rss-channels.git

0

Pytanie czy save z spring data działa jak merge? Pytam, bo nie widzę update. Zapisujemy jakiś obiekt, pobieramy z bazy, znowu używamy save i jeśli ma to samo id to się zaktuakizuje, a nie stworzy kolejny tak?

0

SpringData repositories są zajebiste.

ccu
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Warszawa
  • Postów:11
0
Biały Lew napisał(a):

Pytanie czy save z spring data działa jak merge? Pytam, bo nie widzę update. Zapisujemy jakiś obiekt, pobieramy z bazy, znowu używamy save i jeśli ma to samo id to się zaktuakizuje, a nie stworzy kolejny tak?

Działa na oba sposoby, tzn. zapisuje nowy a aktualizuje istniejący obiekt. Poniżej implementacja save z SimpleJpaRepository:

Kopiuj
  
  @Transactional
    public <S extends T> S save(S entity) {
        if(this.entityInformation.isNew(entity)) {
            this.em.persist(entity);
            return entity;
        } else {
            return this.em.merge(entity);
        }
    }

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.