Persistence.xml
Для начала нам необходимо создать файл persistence.xml и закинуть его в папку META_INF проекта. В файле persistence.xml указываем persistence-unit name, имя которое мы придумываем для последующего вызова унита. И создаем все необходимые конфигурации в тегахorg.hibernate.ejb.HibernatePersistence
EntityManager
Для связи с базой данных вам будет необходим entity manager. Потому создаем примерно следующий класс со статическим доступом к entityManager. В качестве аргумента к методу createEntityManagerFactory используем имя нашего persistence-unit.public final class ServiceLocator {
private static EntityManager entityManager;
public ServiceLocator() {
EntityManagerFactory factory;
factory = Persistence.createEntityManagerFactory("Example");
entityManager = factory.createEntityManager();
}
public static EntityManager getEntityManager() {
return entityManager;
}
}
Классы Dao.
Теперь непосредственно класс, который будет управлять объектами в базе данных. Для пример возьмем два метода. Метод addTeacher добавляет объект Teacher в базу данных, а метод getTeacher возвращает объект Teacher из базы данных, руководствуясь именем и почтой Teacher, которого подали в аргументе. Если же такого в базе данных не находится, то создаем нового Teacher и возвращаем его.public class TeacherDao {
private EntityManager entityManager;
public TeacherDao(final EntityManager entityManager) {
this.entityManager = entityManager;
}
public final Teacher getTeacher(final Teacher teacherToFind) {
Teacher teacher;
List teacherList;
try {
Query query = entityManager.createNamedQuery(Teacher.GET_TEACHER_BY_NAME_AND_EMAIL);
query.setParameter("name", teacherToFind.getName());
query.setParameter("branchId", teacherToFind.getEmail());
teacherList = query.getResultList();
if (teacherList.isEmpty()) {
addTeacher(teacherToFind);
teacher = teacherToFind;
} else {
teacher = teacherList.get(0);
}
} catch (final Throwable throwable) {
if (entityManager.getTransaction().isActive()) {
entityManager.getTransaction().rollback();
}
throw new RuntimeException(throwable);
}
return teacher;
}
public final void addTeacher(final Teacher teacher) {
try {
entityManager.getTransaction().begin();
entityManager.persist(teacher);
entityManager.getTransaction().commit();
} catch (final Throwable throwable) {
if (entityManager.getTransaction().isActive()) {
entityManager.getTransaction().rollback();
}
throw new RuntimeException(throwable);
}
}
}
Пример кода
И, наконец, пример того, как можно это все использовать в коде.new ServiceLocator;
EntityManager entityManager = ServiceLocator.getEntityManager();
TeacherDao teacherDao = new TeacherDao(entityManager);
Teacher teacher = new Teacher;
teacher.setName("Mary");
teacher.setEmail("mary@test.com");
Teacher teacherFromDatabase = teacherDao.getTeacher(teacher);
Автор статьи: Александр Картышев
Комментариев нет:
Отправить комментарий