Hibernate je briljantan ORM, Spring MVC je briljantan framework za web i šta nalaže logika - da se to dvoje spoje. I to rade super, štoviše jedno drugoga nadopunjavaju.
Treba od nekud početi. Zašto uopće sve to? Ako niste spavali zadnjih 10.godina, trenutno je vrlo teško naći web stranicu koja svoj sadržaj ne sprema u bazu podataka. Naravno iznimke postoje i uvijek će ih biti, ali ako generaliziramo, ne znam tko više uopće odabire obične HTML stranice? Odgovor je vrlo lak - moderni hrvatski "biznismen" koji je dao nešto novaca susjedovom malom da mu napravi web stranicu za njegov "biznis". Ali čak i svaki napredniji "susjedov mali" bira bazu kao osnovu za spremanje podataka. Razlog je jednostavan - lakše je! Podatci su dostupni zauvijek, ti podatci se mogu pretraživati, raditi nešto s njima, a da ne pričam koliko je lako dodavanje novih sadržaja kad se ima iole dobar cms. Imajući sve to u vidu, vrijeme je da se vratim na naslov posta.
Ima nekoliko načina na koji se može naučiti ova tema, pa ću i nabrojati nekoliko:
- Službena dokumentacija Spring frameworka (http://static.springsource.org/spring/docs/2.5.x/reference/orm.html)
- Tutrorijali na webu (linkovi u daljnjem tekstu)
- Pisana riječ u obliku knjige - Spring Persistence with Hiberante (http://www.amazon.com/Spring-Persistence-Hibernate-Beginning-Tepper/dp/1430226323)
I dolazimo do knjige. (moj veliki uzdah - brz pretjerivanja!) Cijenim trud autora, ali nikako ni pod koji slučajem nemojte pokušati naučiti ovu temu preko ove knjige tj. nemojte napraviti istu pogrešku kao ja. U životu nisam našao knjigu koja ima više bugova. Skidanjem zipa sa službene stranice knjige i pokušavanje pokretanja builda na istim projektom je urodilo plodom od 63 errora?!? Čovjek bi pomislio da ako nešto prodaješ da ćeš i stajati iza toga. Istina za volju, nisu oni krivi. Kad su tiskali knjigu url od mavenovog repozitorija je bio drugačiji, ali tko se može sjetiti da to provjeri godinu dana kasnije? Malo traženja po googlu mi je dalo riješenje, ali to je samo vrh sante errora u knjizi.
Premda knjiga nije za početnika i nakon što se se uhvatili u koštac sa temom nemojte raditi primjere iz knjige. Knjigu uzmite kao lagano štivo gdje ćete vidjeti neke principe kako se nešto radi. Što se toga tiče knjiga ima neprocjenjivo znanje za prenijeti čitaocu.
I dolazimo do tutorijala, ruku na srce, od njih ćete najviše naučiti. Dati ću 2 linka na 2 turorijala a na vama je da odlučite koji vam se više sviđa. Napominjem da postoje još tutorijala na web, ali ja vam predlažem one koje sam ja prošao i što je važnije - znam da rade. Pošto svaki nudi čitatelju oduzimanje života na jedno minimalno sat vremena, ako ne i više, nema smisla raditi nešto što neće raditi ili što vas uči krivo.
Pa da dam i linkove:
- http://viralpatel.net/blogs/2010/11/spring3-mvc-hibernate-maven-tutorial-eclipse-example.html
- http://krams915.blogspot.com/2011/01/spring-mvc-3-hibernate-annotations.html
Virapatel - ovo je ujedno i moj prvi tutotorial na koji sam naišao da radi. Što nije mala stvar. Treba imati na umu da je ovaj tutorial odrađen pomoću Mavena. Ovaj tutorial bi nazvao "lakšim" tj. napraviti ćete CRD dijelova od CRUD aplikacije. Naime u primjeru nije napravljen dio za editiranje zapisa. Druga stvar koja ga čini "lakšim" je da je kod rascijepkan u više klasa i na prvi pogleda samim time lakši za čitanje. Ali u drugom primjeru ćete vidjeti da je ovo duži način i da se sve može odraditi u manje linija koda. Glavni nedostatak je što nema komentara u kodu.
Skinite primjer, pokušajte pratiti i prepisati kod i pokušajte shvatiti kako cijela stvar radi. I zatim pređite na drugi tutorial.
Krams - koliko je ovaj tutorial dobar govori činjenica da Spring framework daje ovaj tutorial na svojim službenim stranicama kao tutorial za naučiti integraciju hiberante i springa. Još jedna stvar koja mu ide u prilog je da je nakon uočenih pogrešaka u kodu, autor je isti popravio na webu ali i u kodu te ponovni zip projekta stavio na web. Mogli bi se ugledati na njega momci koji pišu knjige na istu temu :)
Sad da kažem zašto je ovaj tutorial dobar: dobro objašnjen, hrpa komentara tako da kad gledate kod jasno vam je šta je šta. Ovaj tutorijal nudi i editiranje zapisa, tako da imate sve dijelove CRUD aplikacije.
Kada su nabrojane prednosti dolaze ne red nedostatci: nema ih! Dobro uvijek se može naći nešto, pa ako moram birati onda ću kao nedostatak navesti upotrebu loggera. S jedne strane je super jer daje priliku pregledavanja logova na serveru, a da s druge strane je to nedostatak jer uz sve silne komentare dodavanje loggera i komentara za njih kod je prenatrpan. Kad sam prolazio kod, brisao sam logger i komentare da vidim samo kod. Ali to sam ja.
Naravno jedna stvar na koju treba imati na umu je da oba primjera koriste MySQL bazu podataka, tako da ako hoćete koristiti neku drugu potrebno je napraviti promjene u jdbc.properties datoteki za Virapatel, te spring.properties datoteci za Krams. Ne zaboravite napraviti baze u MySQL-u pod imenima koja su navedena u tim properties datotekama, te ne zaboravite unjeti svoj username i password za root vašeg MySQL. Ako vam primjeri koje skinete ne budu radili onda niste napravili ove korake koje sam zadnje opisao.
S time svime na umu, sretno! Mislim da ću uskoro i ja dati neki praktičniji primjer ovoj temi, a do tada prođite ova dva tutotorijala i dokumentaciju.