Hibernate - библиотека реализующая модель объектно-реляционного отображения (ORM).
Если проще, то Hibernate позволяет сохранять в базе данных Java-объекты (называемые Entity) и взаимодействия между ними, в отличие от хранения отдельных полей с последующим созданием этих объеков.
Эта библиотека (с помощью IDE) позволяет создавать Entity на основе таблиц базы данных либо наоборот - генерировать таблицы базы данных исходя из структуры и взаимосвязей Java-классов. Тем самым позволяет прежде всего значительно сократить время на написание кода.
Связь (сопоставление) между Java-классами и таблицами базы данных (называемый Mapping) может реализовываться двумя способами - с помощью конфигурационных XML-файлов или Java-аннотаций.
Пример использования конфигурационного XML-файла:
Пример использования аннотаций Java-класса:
Подключение к базе данных осуществляется с помощью сессий (org.hibernate.Session). Сессии управляются фабрикой - org.hibernate.SessionFactory.
Для работы с Hibernate используется реализация интерфейса SessionFactory. Важно отметить, что он создается один раз для приложения!
Есть несколько примеров реализации sessionFactory. Здесь показана реализация из официального мануала jboss.org, с добавлением геттера и метода по завершению подключения:
Если проще, то 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;
}
}
@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;
}
}
Для работы с 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(); } }
Комментариев нет :
Отправить комментарий