-->

Hibernate (Java)

Hibernate - библиотека реализующая модель объектно-реляционного отображения (ORM).

Если проще, то Hibernate позволяет сохранять в базе данных Java-объекты (называемые Entity) и взаимодействия между ними, в отличие от хранения отдельных полей с последующим созданием этих объеков.
Эта библиотека (с помощью IDE) позволяет создавать Entity на основе таблиц базы данных либо наоборот - генерировать таблицы базы данных исходя из структуры и взаимосвязей Java-классов. Тем самым позволяет прежде всего значительно сократить время на написание кода.

Связь (сопоставление) между Java-классами и таблицами базы данных (называемый Mapping) может реализовываться двумя способами - с помощью конфигурационных XML-файлов или Java-аннотаций.

Пример использования конфигурационного XML-файла:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="UserEntity" table="user" schema="test_hibernate_01">
        <id name="id" column="id"/>
        <property name="name" column="name"/>
    </class>

</hibernate-mapping>

Пример использования аннотаций Java-класса:
import javax.persistence.*;

@Entity
@Table
(name = "user", schema = "test_hibernate_01")
public class UserEntity {
   
private int id;
    private
String name;

   
@Id
    @Column
(name = "id", nullable = false)
   
public int getId() {
       
return id;
   
}

   
public void setId(int id) {
       
this.id = id;
   
}

   
@Basic
    @Column
(name = "name", nullable = true, length = 50)
   
public String getName() {
       
return name;
   
}

   
public void setName(String name) {
       
this.name = name;
   
}

   
@Override
   
public boolean equals(Object o) {
       
if (this == o) return true;
        if
(o == null || getClass() != o.getClass()) return false;

       
UserEntity that = (UserEntity) o;

        if
(id != that.id) return false;
        if
(name != null ? !name.equals(that.name) : that.name != null) return false;

        return true;
   
}

   
@Override
   
public int hashCode() {
       
int result = id;
       
result = 31 * result + (name != null ? name.hashCode() : 0);
        return
result;
   
}
}


Подключение к базе данных осуществляется с помощью сессий (org.hibernate.Session). Сессии управляются фабрикой - org.hibernate.SessionFactory.
Для работы с Hibernate используется реализация интерфейса SessionFactory. Важно отметить, что он создается один раз для приложения!
Есть несколько примеров реализации sessionFactory. Здесь показана реализация из официального мануала jboss.org, с добавлением геттера и метода по завершению подключения:
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

public class HibernateSessionFactory {

    private static SessionFactory sessionFactory = buildSessionFactory();

    protected static SessionFactory buildSessionFactory() {

        final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
                .configure()
                .build();
        try {
            sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        } catch (Throwable e) {
            StandardServiceRegistryBuilder.destroy(registry);
            throw new ExceptionInInitializerError("Initial SessionFactory failed... " + e);
        }

        return sessionFactory;
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }
}

Использование:
import com.mvictorl.dao.UserEntity;
import org.hibernate.Session;

import static com.mvictorl.util.HibernateSessionFactory.getSessionFactory;
import static com.mvictorl.util.HibernateSessionFactory.shutdown;

public class Main {
    public static void main(final String[] args) throws Exception {
        final Session session = getSessionFactory().openSession();
        try {
            session.beginTransaction();

            UserEntity contactEntity = new UserEntity();
            contactEntity.setName("Nick");

            session.save(contactEntity);
            session.getTransaction().commit();

            session.close();
        } catch (Exception e) {
            System.out.println(e);
        }
        shutdown();
    }
} 

Комментариев нет :

Отправить комментарий