АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Взаимодействие с БД

Читайте также:
  1. I. Сближение и дистантное взаимодействие половых клеток
  2. Аксиома 4. Сначала взаимодействие, потом действие
  3. Б) Взаимодействие нейтронов с веществом
  4. Бактериофаги. Взаимодействие фага с бактериальной клеткой. Умеренные и вирулентные бактериофаги. Лизогения.
  5. В27. Взаимодействие международного права и внутригосударственного права Российской Федерации.
  6. Веб-сервер и браузер. Взаимодействие.
  7. Взаимодействие g - лучей с веществом.
  8. Взаимодействие S и D.Рыночное равновесие.
  9. Взаимодействие аксиом едино–раздельности и становления.
  10. Взаимодействие в месте приложения действия.
  11. Взаимодействие в факторных схемах
  12. Взаимодействие валеологии с другими науками

При работе с базой данных удобно функции манипулирования с объектами собирать воедино и создавать менеджеры транзакций.

/* пример # 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 относится к потокобезопасным классам, поэтому обычно его объект будет создаваться один раз и храниться в статической переменной. Если же возникли проблемы с базой данных, с пулом соединений либо
с освобождением ресурсов, которые хранятся в объекте SessionFactory, то, возможно, придется поддержать вышеприведенный подход.

Для управления Session используются два похода:

Session для каждой операции с базой данных, либо Session per request в контексте транзакции.

Начиная с версии 3.1, в Hibernate появился новый параметр hibernate.current_session_context_class, который может принимать одно из трех коротких значений, " jta ", " thread " и "managed",
либо классов, которые реализуют интерфейс org.hibernate.context.CurrentSessionContext и будут ответственны за открытие/закрытие сессии.

Если данный параметр установлен в конфигурационном файле, то в коде для получения сессии нужно только вызвать метод 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() не был вызван,
и соответственно отпустит соединение при вызове метода commit() либо rollback().


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.01 сек.)