Wątek przeniesiony 2018-02-01 14:08 z Bazy danych przez Patryk27.

Bazy danych w Springu

0

Dzień dobry Panowie,
Chciałem zapytać o to jak ogarniać bazy danych. Programuję w javie jestem początkujący i pogubiłem się w temacie baz danych.
Na dzień dzisiejszy mój stan wiedzy wygląda tak, że budowałem proste bazy danych mySQL na potrzeby moich aplikacji. Konfigurowałem je prosto przez JDBC i wyciągałem lub zapisywałem poszczególne dane.
Jednak zagłębiając się w tematykę Springa spotkałem się z mnóstwem różnych narzędzi, do których nie wiem jak i w jakiej kolejności się zabrać.
JPA, H2, Hibernate, Embedded database itd.
Fajnie, że tak wiele przede mną, ale jak i po co to wszystko działa?

Będę wdzięczny za krótką zajawkę, w którym kierunku iść.
Pozdrawiam

4

JPA, H2, Hibernate, Embedded database itd.

  1. Poczytaj czym jest mapowanie obiektowo relacyjne (ORM)
  2. JPA - Java Persistence API - interfejs (standard) programistyczny dla mapowania obiektowo-relacyjnego
  3. Hibernate - biblioteka ORM, konkretna implementacja JPA, tzw. provider lub vendor (http://hibernate.org/orm/)
  4. Embedded database - baza danych, która rezyduje w pamięci RAM, np H2. Bardzo przydatna w czasie działania np. testów aplikacji. (http://www.h2database.com/html/main.html)

Ogarnij te wszystkie punkty powyżej a potem:

  1. Poszukaj jakiegoś tutoriala o stawianiu prostej aplikacji z dołączeniem Hibernate'a
  2. Poszukaj repozytoriów projektów z przykładami dotyczącymi Hibernate'a (np. "hibernate examples" na githubie)

Ciekawy link na później - https://vladmihalcea.com/tutorials/hibernate/

0

W Springu JPA zwykle używa się przy użyciu Spring Data (przecież nie będziesz używał czystego EntityManagera)?

Z rozwiązań typowo SQL oriented moje ulubione to jOOQ (szczególnie fajne, gdy chcesz pisać type-safe zapytania dynamiczne np. w zależności od parametrów jest różne WHERE). Cechą jOOQ (czy wadą czy zaletą to dyskusyjne) jest konieczność wygenerowania klas na potrzeby DSL na podstawie istniejącego schmatu bazy.

Nie zapominaj też o zupełnie wystarczającym JDBC Template. Ciekawym dodatkiem jaki jakiś czas temu testowałem jest biblioteka Spring Data JDBC template nieco redukująca prosty CRUD dla czystego JDBC (implementuje podstawowowe interfejsy SpringData tzn. CrudRepository, PagingAndSortingRepository):
https://github.com/jirutka/spring-data-jdbc-repository
Niestety, nie masz wsparcia dla dynamicznych zapytań Spring Data w stylu findPersonBySurname: dużo kodu do naklepania, niestety. Jak chcesz mieć autouzupełnianie trywialnych zapytań idź w Spring Data JPA. Ale stwórz sobie dodatkową warstwę abstrakcji, tak aby w kodzie biznesowych pracować na niemutowalnych obiektach.

Nie jestem fanem baz embedded: mogą zachowywać się zupełnie inaczej jak produkcyjna baza. Jak ktoś używa czystego ORM powinno być spoko, jak pojawi się jakaś cecha związana z silnikiem np. przydatna funkcja SQL to może nie być kompatybilne i test mocno rozminie się z rzeczywistością.

1 użytkowników online, w tym zalogowanych: 0, gości: 1