Aby zbudować pierwszą aplikacje należy pamiętać o kilku czynnikach.
Co jest potrzebne, aby zbudować aplikacje wykorzystując Hibernate:
- Dodanie do aplikacji zależności do Hibernate;
- sterownik baz danych;
- plik konfiguracyjny o domyślnej nazwie hibernate.cfg.xml. Definiuje on połączenie z baza danych, klasy encji itp.
- Zdefiniowaną w aplikacji metodę zwracającą obiekt SessionFactory, która umożliwia tworzenie sesji odpowiedzialnych za łączenie się z bazą danych.
- Encje JPA, są to klasy na bazie POJO, które posiadają następujące właściwości:
- Adnotację @Entity nad daną klasą;
- posiadają co najmniej jeden bezparametrowy konstruktor;
- pole stanowiące id np oznaczone adnotacją @Id;
- getery i setery do pól;
- dobrą praktyką jest dodanie interfejsu Serializable (wymagane przy stosowaniu kluczy złożonych o czym później).
Dodanie zależności Hibernate oraz sterownika baz danych
Te dwie czynności dokonuje się poprzez dodanie odpowiednich zależności do projektu. Poniżej przykład dla aplikacji zbudowanej z wykorzystaniem Maven.
Pierwsza zależność to sterownik do bazy danych – w tym przykładzie MySQL, a druga zależność to zależność do frameworka Hibernate.
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.11.Final</version> </dependency>
Zdefiniowanie klasy encji
Właściwości jakie posiada klasa encji zostały opisane powyżej, dlatego poniżej przykładowy kod dla klasy Dog:
package entity; import javax.persistence.*; @Entity public class Dog { @Id @GeneratedValue private Long id; private String name; private int age; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Dog{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
Plik konfiguracyjny hibernate.cfg.xml
Nazwa dla pliku można być dowolna, jednak warto pozostać przy domyślnej nazwie, aby nie trzeba było jej nadpisywać w kodzie programu.
Jego budowa jest następująca:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/db_name</property> <property name="hibernate.connection.username">user</property> <property name="hibernate.connection.password">pass</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <mapping class="entity.Dog" /> </session-factory> </hibernate-configuration>
Pierwsza część to DTD, który definiuje jaki jest to rodzaj dokumentu.
Następnie jest sekcja <session-factory>, która po kolei definiuje:
- nazwa sterownika bazy danych, analogiczna do bazy danych z której korzystamy. Lista poniżej:
MySQL Com.Mysql.Jdbc.Driver HSQLDB Org.Hsqldb.JdbcDriver Sybase Com.Sybase.Jdbc3.Jdbc.SybDriver Apache Derby Org.Apache.Derby.Jdbc.EmbeddedDriver IBM DB2 Com.Ibm.Db2.Jcc.DB2Driver PostgreSQL Org.Postgresql.Driver SQL Server (Microsoft Driver) Com.Microsoft.Sqlserver.Jdbc.SQLServerDriver Informix Com.Informix.Jdbc.IfxDriver H2 Org.H2.Driver - host bazy danych, oraz jej nazwa;
- użytkownik bazy danych;
- hasło użytkownika bazy danych;
- pokazywanie w logach aplikacji informacji o zapytaniach
- dialekt bazy danych, również analogiczna do bazy danych z której korzystamy 🙂 Pełna lista >>Dialekty baz danych<<
Ostatnim elementem jest dodanie klas encji z pakietem.
Jeśli nie chcesz ręcznie tworzyć struktury bazy danych możesz dodać linijkę dopowiadająca za automatyczne jest stworzenie. Artykuł na ten temat w kolejnej części.
Plik hibernate.cfg.xml należy umieścić w katalogu resources projektu.
Powoływanie SessionFactory
Domyślna implementacja SessionFactory.
public class HibernateFactory { public SessionFactory getSessionFactory() { Configuration configuration = new Configuration().configure(); StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); SessionFactory sessionFactory = configuration.buildSessionFactory(registryBuilder.build()); return sessionFactory; } }
Klasy dostępu
Projekt już jest skończony. Aplikacja została zintegrowana z Hibernate i jest gotowa do użytku.
Można teraz zaimplementować przykładową pozwalającą na dodawanie, usuwanie, modyfikowanie obiektów.
Całą aplikacje wraz z przykładami wykonywania zapytań znajdziesz na GitHub:
https://github.com/bykowski/SimpleTableHibernateMySQL
Oczywiście zanim dokonasz operacje należy zadbać o odpowiednią strukturę bazy danych.
Co w następnej części?
Opis związków między relacjami. 1:1, 1:Wielu, Wiele:Wielu, ale jeszcze przed tym automatycznie budowanie struktury bazy danych.