|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Взаимодействие с БДПри работе с базой данных удобно функции манипулирования с объектами собирать воедино и создавать менеджеры транзакций. /* пример # 9: инициализация mapping и подключение к БД: StudentDAO.java */ package com.hib; import net.sf.hibernate.*; public class StudentDAO { //проверка на существование записи в базе данных public static Boolean studentExists(String login) { Session session = ConnectionFactory.getOrInitSession(); Student _student = null; try { // создание запроса к БД Query query = session.createQuery( " from Student a where a.login =:login "); query.setParameter("login", login); /*этот метод позволяет получать уникальные результаты. Необходимо обеспечить уникальность результатов на уровне БД, если используется данная функция */ _student = (Student) query.uniqueResult(); } catch (HibernateException e) { e.printStackTrace(); ConnectionFactory.destroy(); } finally { if (session!= null) { try { session.close(); } catch (HibernateException e) { e.printStackTrace(); ConnectionFactory.destroy(); } } } if (_student!= null) { return new Boolean(true); } else { return null; } } public static Student getStudent(String login, String password) { Session session = ConnectionFactory.getOrInitSession(); Student _student = null; try { Query query = session.createQuery( "from Student a where a.login =:login"); query.setParameter("login", login); _student = (Student) query.uniqueResult(); } catch (HibernateException e) { e.printStackTrace(); ConnectionFactory.destroy(); } finally { if (session!= null) { try { session.close(); } catch (HibernateException e) { e.printStackTrace(); ConnectionFactory.destroy(); } } } if (_student!= null) { if (password.equals(_student.getPassword())) { return _student; } else return null; } else return null; } //обновление учетной записи студента //для возможности таких обновлений прописывался тег id в mapping public static void updateStudent(Student _student) { Session session = ConnectionFactory.getOrInitSession(); try { Transaction tx = null; tx = session.beginTransaction(); session.update(_student); tx.commit(); } catch (HibernateException e) { e.printStackTrace(); tx.rollback(); ConnectionFactory.destroy(); } finally { if (session!= null) { try { session.close(); } catch (Exception e) { e.printStackTrace(); ConnectionFactory.destroy(); } } } } //добавление учетной записи студента // в этом случае работает директива native из mapping public static Boolean addStudent(Student _student) { Session session = ConnectionFactory.getOrInitSession(); try { Transaction tx = null; tx = session.beginTransaction(); session.save(_student); tx.commit(); } catch (HibernateException e) { e.printStackTrace(); tx.rollback(); ConnectionFactory.destroy(); return null; } finally { if (session!= null) { try { session.close(); } catch (Exception e) { e.printStackTrace(); ConnectionFactory.destroy(); return null; } } } return new Boolean(true); } //удаление учетной записи студента public static void deleteStudent(Student _student) { Session session = ConnectionFactory.getOrInitSession(); try { Transaction tx = null; tx = session.beginTransaction(); session.delete(_student); tx.commit(); } catch (HibernateException e) { e.printStackTrace(); tx.rollback(); ConnectionFactory.destroy(); } finally { if (session!= null) { try { session.close(); } catch (Exception e) { e.printStackTrace(); ConnectionFactory.destroy(); } } } } }
Класс SessionFactory относится к потокобезопасным классам, поэтому обычно его объект будет создаваться один раз и храниться в статической переменной. Если же возникли проблемы с базой данных, с пулом соединений либо Для управления Session используются два похода: Session для каждой операции с базой данных, либо Session per request в контексте транзакции. Начиная с версии 3.1, в Hibernate появился новый параметр hibernate.current_session_context_class, который может принимать одно из трех коротких значений, " jta ", " thread " и "managed", Если данный параметр установлен в конфигурационном файле, то в коде для получения сессии нужно только вызвать метод SessionFactory.getCurrentSession(),который либо вернет уже привязанную к данному контексту сессию, либо создаст новую. Установив свойство в конфигурационном файле <property name= "current_session_context_class">thread </property> метод deleteStudent() можно переписать следующим образом. public static void deleteStudent(Student _student) {
Session session = ConnectionFatory.sessionFactory .getCurrentSession(); try { Transaction tx = null; tx = session.beginTransaction(); session.delete(_student); tx.commit(); } catch (HibernateException e) { e.printStackTrace(); tx.rollback(); } }
В данном случае управление соединением будет производиться классом org.hibernate.context.ThreadLocalSessionContext,который будет использовать соединение, пока метод beginTransaction() не был вызван, Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.) |