Macie aplikację Javową (np. w Springu) i chcecie napisać do niej DAO do relacyjnej bazy danych (np. Oracle lub PostgreSQL). Zależy wam na wydajności i kontrolowaniu tabel/zapytań (w sensie, żeby samemu decydować kiedy ma się zrobić tabela, a nie automatycznie pod każdą klasę; żeby samemu decydować kiedy ma być join itd., bo jest to kosztowne).
Czego używacie? - Spring Date, - Hibernate (bez HQL, tylko konfiguracja w Javie), - Hibernate z HQL, - JPA bez Hibernate (np. na WebSphere), - MyBatis, - czyste SQL z JDBC (ewentualnie z Spring JdbcTemplate), - coś innego?
@mk321: Jeśli Ci zależy na wydajności a jednocześnie mapowaniu na encje to mybatis wydaje się najlepszy. Hibernate/Spring Data obniży wydajność i kontrolę nad zapytaniami. Przy MyBatis masz wsparcie klas, więc przewaga nad jdbc
@mk321: W 80% przypadków wystarcza ci Hibernate, jak masz miejsce gdzie baza cię dusi bo hibernate coś #!$%@? to zawsze możesz natywne zapytanie puścić. Czasami używa się też query builderów typu jOOQ (ten akurat ma też dodatkowe ficzery).
@mk321 w większości firm używasz prostego crud. Do zapisywania czy update encji spring data jest mega wygodny i super się w tym kodzi. Mybatis polecam używać jak masz skomplikowane query do pobierania z bazy
@cxnmlhuipwetr: @ThePawel: mamy takie wielkie tabele, że czasem kilka dni zastanawiamy się czy możemy zrobić dodatkowego joina czy nie (czy nam to drastycznie nie wpłynie na wydajność albo nawet nie ubije bazy). W MyBatis wszystkie zapytania kontrolujemy.
Jeśli bym użył Hibernate, to musiałbym do wszystkiego i tak pisać HQL (i mam nadzieję, że pod spodem Hibernate by nie robił jakiś czarów). Miałoby to jakieś zalety nad MyBatisem?
@mk321: akurat MyBatis jest użyty tylko w malutkej części i raczej nie chcemy aby rozlazł się po całym projekcie (nie ze względu, że jest zły, tylko że i tam mamy wystarczająco innych rozwiązań).
W moim przypadku, gdy potrzebuję zapytania, które jest skomplikowane ale w miare stałe (zmieniają się parametry) - to sql + jdbcTemplate wystarcza. Gdyby faktycznie, trzeba było bardziej skomplikowanych warunków (w zależności od X zmienia się częśc zapytania)
@mk321 zaleta hibernate nad mybatis to mapowanie na encje i łatwość w użyciu. Performance zawsze będzie gorszy więc jak macie takie problemy z Joinami to bym został przy my Batis ewentualnie delete update create I proste fetch Po id przenieść do spring data
@mk321: Spring/Spring Data JPA jest z tego wszystkiego najbardziej uniwersalne. W prostych przypadkach opierasz sie na tym co wymyśli Hibernate. Jak potrzebujesz napisać proste zapytanie z palca to robisz Query albo Native Query. Potrzebujesz zapytania na 100 linii? Piszesz osobny plik sql i ładujesz go do JdbcTemplate. Potrzebujesz warunkowych zapytań składanych w runtimie? Dokładasz QueryDSL.
Macie aplikację Javową (np. w Springu) i chcecie napisać do niej DAO do relacyjnej bazy danych (np. Oracle lub PostgreSQL). Zależy wam na wydajności i kontrolowaniu tabel/zapytań (w sensie, żeby samemu decydować kiedy ma się zrobić tabela, a nie automatycznie pod każdą klasę; żeby samemu decydować kiedy ma być join itd., bo jest to kosztowne).
Czego używacie?
- Spring Date,
- Hibernate (bez HQL, tylko konfiguracja w Javie),
- Hibernate z HQL,
- JPA bez Hibernate (np. na WebSphere),
- MyBatis,
- czyste SQL z JDBC (ewentualnie z Spring JdbcTemplate),
- coś innego?
Do wydajnego DAO używam:
@ThePawel: dokładnie tak.
Serio MyBatis to jest najlepsze rozwiązanie w takim
I w kryzysowych sytuacjach ratuje nas SQL (jdbcTemplate).
PS. super zabawa zaczyna się jak trzeba zrobić transakcje na 2 baza przy wykorzystaniu 3 różnych podejść :)
@SuppressWarnings: Hibernate to tylko jedna z implementacji JPA.
Tak jak
@mccloud: o kurde, nieźle xD
Jeśli bym użył Hibernate, to musiałbym do wszystkiego i tak pisać HQL (i mam nadzieję, że pod spodem Hibernate by nie robił jakiś czarów). Miałoby to jakieś zalety nad MyBatisem?
W moim przypadku, gdy potrzebuję zapytania, które jest skomplikowane ale w miare stałe (zmieniają się parametry) - to sql + jdbcTemplate wystarcza.
Gdyby faktycznie, trzeba było bardziej skomplikowanych warunków (w zależności od X zmienia się częśc zapytania)
Spring/Spring Data JPA jest z tego wszystkiego najbardziej uniwersalne. W prostych przypadkach opierasz sie na tym co wymyśli Hibernate. Jak potrzebujesz napisać proste zapytanie z palca to robisz Query albo Native Query. Potrzebujesz zapytania na 100 linii? Piszesz osobny plik sql i ładujesz go do JdbcTemplate. Potrzebujesz warunkowych zapytań składanych w runtimie? Dokładasz QueryDSL.