w , ,

FajneFajne Dobre!Dobre! ŚwietnieŚwietnie WnerwWnerw SmuteczekSmuteczek

Hibernate #2 – pierwsza aplikacja

hibernate
hibernate

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:
    MySQLCom.Mysql.Jdbc.Driver
    HSQLDBOrg.Hsqldb.JdbcDriver
    SybaseCom.Sybase.Jdbc3.Jdbc.SybDriver
    Apache DerbyOrg.Apache.Derby.Jdbc.EmbeddedDriver
    IBM DB2Com.Ibm.Db2.Jcc.DB2Driver
    PostgreSQLOrg.Postgresql.Driver
    SQL Server (Microsoft Driver)Com.Microsoft.Sqlserver.Jdbc.SQLServerDriver
    InformixCom.Informix.Jdbc.IfxDriver
    H2Org.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.

Cały kurs opisujący mechanikę i działanie Frameworka Hibernate od podstaw znajdziesz tutaj: Kurs Hibernate

Napisane przez Przemysław Bykowski

Aktywny programista i energiczny trener. Specjalizuje się w Spring Boot i uczę go w ramach AkademiaSpring.pl. Po godzinach udzielam się na YouTubach. Więcej o mnie.

Dodaj komentarz

hibernate

Hibernate #1 – czym jest?

hibernate

Hibernate #3 – strategie zarządzania schematem bazy danych