Dziś naszym zadaniem jest ukończenie drugiego projektu o tematyce Hibernate. Jego istotą jest zrozumienie struktury bazy danych, odwzorowanie encji na istniejące tabele i dodanie minimalnej funkcjonalności, aby sprawdzić, czy mapowanie jest wykonane poprawnie.
Teraz bardziej szczegółowo:
- Pobierz plik zrzutu i wdróż go na komputerze lokalnym. Jako bazę danych wykorzystamy testową bazę danych, która jest rozprowadzana jako przykład wraz z pakietem instalacyjnym MySQL. Zrzut jest potrzebny, aby naprawić stan bazy danych, ponieważ nie możemy zagwarantować, że nie zmieni się on w ciągu dnia, miesiąca, roku.
- Nie będziemy mieć szablonu projektu, więc sam stwórz projekt. Powinien to być projekt Maven ze wszystkimi wymaganymi zależnościami ( hibernate-core-jakarta , mysql-connector-java , p6spy ).
- Podłącz naszą lokalnie wdrożoną bazę danych jako źródło danych w Idea. Następnie w zakładce Baza danych najedź kursorem na schemat filmu i naciśnij kombinację klawiszy
Alt+Ctrl+Shift+U
(działa tylko w wersji Ultimate). Spowoduje to wyświetlenie struktury całego schematu filmu (z nazwami kolumn, kluczami itp.). Wygląda tak:Zgadzam się, nie jest to zbyt wygodne do oglądania. Wyłącz wyświetlanie tytułu wszystkich kolumn i komentarzy:
W rezultacie otrzymasz schemat bazy danych, który można już przeanalizować:
- Układ wygląda na skomplikowany, ale nie wszystko jest takie złe. Aby przeanalizować strukturę bazy danych, musisz dowiedzieć się, od czego zacząć. Nie ma jednej poprawnej odpowiedzi, ale polecam zacząć od tabeli
film
. Weźmy jako przykład kilka relacji:- Relacja między tabelami
film
ifilm_text
jest jawną relacją jeden do jednego , ponieważ tabelafilm_text
ma pole,film_id
któreNIEodnosi się do identyfikatora z tabelifilm
(bez klucza obcego). Ale z nazwy i logiki, to połączenie powinno być. Dodatkowo w tabelifilm_text
polefilm_id
pełni funkcję klucza podstawowego, co gwarantuje, że jednemu „filmowi” odpowiada nie więcej niż jeden „tekst filmowy”. - Teraz spójrzmy na tabele
film
icategory
. Logicznie rzecz biorąc, film może mieć kilka kategorii. I jedna kategoria, może różne filmy. Ponadto między tymi dwiema tabelami znajduje się tabela połączeń pośrednichfilm_category
. Na podstawie powyższego można stwierdzić, że jest to wyraźna relacja ManyToMany . - Patrzymy na tabele
film
ilanguage
. Z punktu widzenia logiki film może mieć tłumaczenie na różne języki, a różne filmy mogą być w tym samym języku. Oznacza to, że ManyToMany sugeruje się . Ale jeśli spojrzymy na zawartość tabelifilm
, zobaczymy, że każdy wiersz tabeli to unikalny film. A w wierszu jest tylko jedno pole language_id (jest też original_language_id, ale we wszystkich rekordach jest puste, więc możemy je zignorować). Oznacza to, że jeden film może mieć tylko jeden język. I jeden język, może różne filmy. Połączenie to ManyToOne (połączenie jest kierowane z filmu na język).
- Relacja między tabelami
- Teraz głównym zadaniem jest utworzenie wszystkich niezbędnych klas jednostek i odwzorowanie ich na tabele schematu
movie
. - Dodaj metodę, która może utworzyć nowego klienta (tabelę klientów) ze wszystkimi zależnymi polami. Nie zapomnij, aby metoda była transakcyjna (aby nie dopuścić do sytuacji, że adres kupującego jest zapisany w bazie danych, ale sam kupujący nie).
- Dodaj metodę transakcyjną opisującą zdarzenie „klient poszedł i zwrócił wcześniej wypożyczony film”. Wybierz dowolne wydarzenie kupna i wynajmu. Oceny filmu nie trzeba przeliczać.
- Dodaj metodę transakcyjną opisującą zdarzenie „kupujący udał się do sklepu (sklepu) i tam wynajął (wypożyczył) inwentarz (inwentarz). Jednocześnie dokonał płatności (płatności) na rzecz sprzedawcy (personelu). Film (poprzez zapasy) wybierz według własnego uznania. Jedynym ograniczeniem jest to, że film musi być dostępny do wypożyczenia. Oznacza to, że albo w ogóle nie powinno być rekordów inwentarza w wynajmie, albo kolumna data_zwrotu tabeli
rental
dla ostatniego wypożyczenia tego inwentarza powinna być wypełniona. - Dodaj metodę transakcyjną opisującą zdarzenie „nakręcono nowy film i udostępniono go do wypożyczenia”. Film, język, aktorzy, kategorie itp. wybierz według własnego uznania.
- Struktury tabeli nie można zmienić. Ale musisz zasugerować ulepszenia. Zidentyfikowaliśmy jedno problematyczne miejsce w akapicie 4 (brak klucza obcego w tabeli
film_text
w polufilm_id
tabelifilm
). Sprawdź, czy w strukturze bazy danych nadal nie ma takich „błądów”. Jeśli tak, dodaj plik readme do katalogu głównego projektu i opisz te błędy.
Analiza projektu: