SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Углубленное 
программирование на 
Java 
Лекция 3.2 
«ORM» 
Виталий Чибриков
План лекции 
2 
1. ORM 
2. Hibernate 
3. HQL 
4. DB Service
Object-Relational Mapping 
3 
Связь между объектной моделью программы и реляционной 
моделью базы 
Пример 
Методы DAO принимают объекты и сохраняют их в базе 
Методы DAO возвращают объекты собирая их на основе запросов
Java Persistence API 
4 
Package javax.persistence 
Аннотации 
@Entity: объект класса можно «переложить» в таблицу 
@Table: связывает класс и таблицу 
@Id: поле является первичным ключом в таблице 
@Column: связывает поле и колонку в таблице
DataSet 
5 
DataSet ― объект содержащий данные одной строки таблицы 
На каждую таблицу свой DataSet 
Извлечение и вставку данных удобно проводить через DataSet-ы 
В терминах JPA DataSet это Entity
DataSet 
6 
public class UsersDataSet { 
private long id; 
private String name; 
public UsersDataSet(long id, String name){ 
this.id = id; this.name = name; 
} 
public UsersDataSet(String name){ 
this.id = -1; this.name = name; 
} 
public String getName() { return name; } 
public long getId() { return id; } 
}
DAO 
Data Access Object 
7 
Объект доступа к данным 
Шаблон проектирования скрывающий детали работы с базой 
Обычно один DAO на одну таблицу 
Высокоуровневый доступ к данным через DataSet-ы 
Варианты операций над базой: 
Вставка строки ― добавление DataSet 
Поиск строки по ключу ― возврат DataSet-а 
Поиск строк по признаку ― возврат List<DataSet> 
Удаление строки
interface UsersDAO 
8 
public interface UsersDAO { 
UsersDataSet get(long id) throws SQLException; 
UsersDataSet getByName(String name) throws SQLException; 
void add(UsersDataSet dataSet) throws SQLException; 
void delete(long id) throws SQLException; 
}
План лекции 
9 
1. ORM 
2. Hibernate 
3. HQL 
4. DB Service
Hibernate 
ORM библиотека для Java 
<dependencies> 
<dependency> 
<groupId>mysql</groupId> 
<artifactId>mysql-connector-java</artifactId> 
<version>5.1.33</version> 
</dependency> 
<dependency> 
<groupId>org.hibernate</groupId> 
<artifactId>hibernate-core</artifactId> 
<version>4.3.7.Final</version> 
</dependency> 
</dependencies> 
10
Configuration 
11 
Configuration configuration = new org.hibernate.cfg.Configuration(); 
configuration.setProperty(propertyName, propertyValue); 
propertyName propertyValue 
hibernate.dialect org.hibernate.dialect.MySQLDialect 
hibernate.connection.driver_clas 
com.mysql.jdbc.Driver 
s 
hibernate.connection.url jdbc:mysql://localhost:3306/Lecture3 
hibernate.connection.username tully 
hibernate.connection.password tully 
hibernate.show_sql true 
hibernate.hbm2ddl.auto update
hibernate.hbm2ddl.auto 
12 
hibernate.hbm2ddl.auto 
Автоматически создает или проверяет схему базы 
при создании SessionFactory 
validate: проверяет схему, не внося изменений 
update: обновляет схему, если находит различия 
create: пересоздает схему 
create-drop: уничтожает схему при закрытии SessionFactory
Session Factory 
13 
Фабрика, которая создает сессии 
Одна фабрика на поток 
Одна сессия на запрос
Session Factory 
14 
StandardServiceRegistryBuilder builder = new 
StandardServiceRegistryBuilder(); 
builder.applySettings(configuration.getProperties()); 
ServiceRegistry serviceRegistry = builder.buildServiceRegistry(); 
SessionFactory sessionFactory = 
configuration.buildSessionFactory(serviceRegistry); 
Session session = sessionFactory.openSession(); 
Transaction transaction = session.beginTransaction(); 
System.out.append(transaction.getLocalStatus().toString()); 
session.close(); 
sessionFactory.close();
Аннотации для DataSet-ов 
15 
import javax.persistence.*; 
@Entity 
@Table(name="users") 
public class UserDataSet { 
@Id 
@Column(name="id") 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private long id; 
@Column(name="name") 
private String name; 
… 
Перед созданием SessionFactory: 
configuration.addAnnotatedClass(UserDataSet.class); 
}
Session 
16 
Основной интерфейс между приложением и библиотекой 
Время жизни сессии соответствует времени жизни транзакции 
Задача сеcсии ― работа с объектами проанотированными как @Entity 
public void save(UserDataSet dataSet){ 
Session session = sessionFactory.openSession(); 
Transaction trx = session.beginTransaction(); 
session.save(dataSet); 
trx.commit(); 
session.close(); 
} 
public UserDataSet read(long id){ 
Session session = sessionFactory.openSession(); 
return (UserDataSet)session.load(UserDataSet.class, id); 
}
DAO 
17 
public class UserDataSetDAO { 
private SessionFactory sessionFactory; 
public UserDataSetDAO(SessionFactory sessionFactory){ 
this.sessionFactory = sessionFactory; 
} 
… 
}
План лекции 
18 
1. ORM 
2. Hibernate 
3. HQL 
4. DB Service
HQL 
19 
Hibernate Query Language 
«Язык» написания запросов «к hibernate» 
Вместо написания запросов к базе – описание запроса вызовами 
методов сессии 
https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/ 
queryhql.html 
http://www.tutorialspoint.com/hibernate/ 
hibernate_query_language.htm
HQL вставка 
20 
public void save(UserDataSet dataSet){ 
Session session = sessionFactory.openSession(); 
Transaction trx = session.beginTransaction(); 
session.save(dataSet); 
trx.commit(); 
session.close(); 
}
HQL чтение 
21 
public UserDataSet read(long id){ 
Session session = sessionFactory.openSession(); 
return (UserDataSet) session.load(UserDataSet.class, id); 
}
HQL поиск по ключу 
22 
public UserDataSet readByName(String name) { 
Session session = sessionFactory.openSession(); 
Criteria criteria = session.createCriteria(UserDataSet.class); 
return (UserDataSet) criteria.add(Restrictions.eq("name", name)).uniqueResult(); 
}
HQL получение всех записей 
23 
public List<UserDataSet> readAll() { 
Session session = sessionFactory.openSession(); 
Criteria criteria = session.createCriteria(UserDataSet.class); 
return (List<UserDataSet>) criteria.list(); 
}
План лекции 
24 
1. ORM 
2. Hibernate 
3. HQL 
4. DB Service
Database Service 
25 
DatabaseService – сервис скрывающий работу с базой 
При создании соединяется с базой 
В своих методах создает DAO 
JDBC 
TExecutor ― класс с типизированными методами для работы 
с запросами 
Hibernate 
Аннотации на все DataSet-ы, автоматическое создание схемы
Database Service 
26 
Для каждой таблицы 
TableDAO ― объект доступа к данным таблицы с именем Table 
TableDataSet ― объект с данными одной строки таблицы 
с именем Table
Спасибо за внимание 
Виталий Чибриков 
chibrikov@corp.mail.ru

Weitere ähnliche Inhalte

Was ist angesagt?

Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхKirill Zotin
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.Igor Shkulipa
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJSYura Bogdanov
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Fedor Lavrentyev
 
Java осень 2013 лекция 8
Java осень 2013 лекция 8Java осень 2013 лекция 8
Java осень 2013 лекция 8Technopark
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 
Java весна 2013 лекция 8
Java весна 2013 лекция 8Java весна 2013 лекция 8
Java весна 2013 лекция 8Technopark
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderАлександр Брич
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Fedor Lavrentyev
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threadsMERA_school
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.Igor Shkulipa
 
Android - 13 - Database
Android - 13 - DatabaseAndroid - 13 - Database
Android - 13 - DatabaseNoveo
 
использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.Asya Dudnik
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.Igor Shkulipa
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 
Multithreading in java past and actual
Multithreading in java past and actualMultithreading in java past and actual
Multithreading in java past and actualYevgen Levik
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collectionsMERA_school
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSPUnguryan Vitaliy
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.Igor Shkulipa
 

Was ist angesagt? (20)

Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталях
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJS
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
 
Java осень 2013 лекция 8
Java осень 2013 лекция 8Java осень 2013 лекция 8
Java осень 2013 лекция 8
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
Java весна 2013 лекция 8
Java весна 2013 лекция 8Java весна 2013 лекция 8
Java весна 2013 лекция 8
 
JDBC
JDBCJDBC
JDBC
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, Loader
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threads
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.
 
Android - 13 - Database
Android - 13 - DatabaseAndroid - 13 - Database
Android - 13 - Database
 
использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
Multithreading in java past and actual
Multithreading in java past and actualMultithreading in java past and actual
Multithreading in java past and actual
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collections
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSP
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.
 

Andere mochten auch

Разработка веб-сервисов осень 2013 лекция 9
Разработка веб-сервисов осень 2013 лекция 9Разработка веб-сервисов осень 2013 лекция 9
Разработка веб-сервисов осень 2013 лекция 9Technopark
 
Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2Technopark
 
Android осень 2013 лекция 1
Android осень 2013 лекция 1Android осень 2013 лекция 1
Android осень 2013 лекция 1Technopark
 
Безопасность интернет-приложений осень 2013 лекция 2
Безопасность интернет-приложений осень 2013 лекция 2Безопасность интернет-приложений осень 2013 лекция 2
Безопасность интернет-приложений осень 2013 лекция 2Technopark
 
Безопасность интернет-приложений осень 2013 лекция 10
Безопасность интернет-приложений осень 2013 лекция 10Безопасность интернет-приложений осень 2013 лекция 10
Безопасность интернет-приложений осень 2013 лекция 10Technopark
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3Technopark
 
Java весна 2014 лекция 1
Java весна 2014 лекция 1Java весна 2014 лекция 1
Java весна 2014 лекция 1Technopark
 
English skills in it company
English skills in it companyEnglish skills in it company
English skills in it companyspillector
 
HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3Technopark
 
Управление продуктом осень 2013 лекция 5
Управление продуктом осень 2013 лекция 5Управление продуктом осень 2013 лекция 5
Управление продуктом осень 2013 лекция 5Technopark
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1Technopark
 
Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Technopark
 
Java осень 2013 лекция 1-1
Java осень 2013 лекция 1-1Java осень 2013 лекция 1-1
Java осень 2013 лекция 1-1Technopark
 
Разработка веб-сервисов осень 2013 лекция 1 2
Разработка веб-сервисов осень 2013 лекция 1 2Разработка веб-сервисов осень 2013 лекция 1 2
Разработка веб-сервисов осень 2013 лекция 1 2Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...Technopark
 
HighLoad весна 2014 лекция 6
HighLoad весна 2014 лекция 6HighLoad весна 2014 лекция 6
HighLoad весна 2014 лекция 6Technopark
 
Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Technopark
 
Java c человеческим (и даже богатым) лицом / Филипп Дельгядо
Java c человеческим (и даже богатым) лицом / Филипп ДельгядоJava c человеческим (и даже богатым) лицом / Филипп Дельгядо
Java c человеческим (и даже богатым) лицом / Филипп ДельгядоOntico
 
Проектирование интерфейсов весна 2014 занятие 7
Проектирование интерфейсов весна 2014 занятие 7Проектирование интерфейсов весна 2014 занятие 7
Проектирование интерфейсов весна 2014 занятие 7Technopark
 
Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Technopark
 

Andere mochten auch (20)

Разработка веб-сервисов осень 2013 лекция 9
Разработка веб-сервисов осень 2013 лекция 9Разработка веб-сервисов осень 2013 лекция 9
Разработка веб-сервисов осень 2013 лекция 9
 
Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2
 
Android осень 2013 лекция 1
Android осень 2013 лекция 1Android осень 2013 лекция 1
Android осень 2013 лекция 1
 
Безопасность интернет-приложений осень 2013 лекция 2
Безопасность интернет-приложений осень 2013 лекция 2Безопасность интернет-приложений осень 2013 лекция 2
Безопасность интернет-приложений осень 2013 лекция 2
 
Безопасность интернет-приложений осень 2013 лекция 10
Безопасность интернет-приложений осень 2013 лекция 10Безопасность интернет-приложений осень 2013 лекция 10
Безопасность интернет-приложений осень 2013 лекция 10
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3
 
Java весна 2014 лекция 1
Java весна 2014 лекция 1Java весна 2014 лекция 1
Java весна 2014 лекция 1
 
English skills in it company
English skills in it companyEnglish skills in it company
English skills in it company
 
HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3
 
Управление продуктом осень 2013 лекция 5
Управление продуктом осень 2013 лекция 5Управление продуктом осень 2013 лекция 5
Управление продуктом осень 2013 лекция 5
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1
 
Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2
 
Java осень 2013 лекция 1-1
Java осень 2013 лекция 1-1Java осень 2013 лекция 1-1
Java осень 2013 лекция 1-1
 
Разработка веб-сервисов осень 2013 лекция 1 2
Разработка веб-сервисов осень 2013 лекция 1 2Разработка веб-сервисов осень 2013 лекция 1 2
Разработка веб-сервисов осень 2013 лекция 1 2
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 
HighLoad весна 2014 лекция 6
HighLoad весна 2014 лекция 6HighLoad весна 2014 лекция 6
HighLoad весна 2014 лекция 6
 
Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2
 
Java c человеческим (и даже богатым) лицом / Филипп Дельгядо
Java c человеческим (и даже богатым) лицом / Филипп ДельгядоJava c человеческим (и даже богатым) лицом / Филипп Дельгядо
Java c человеческим (и даже богатым) лицом / Филипп Дельгядо
 
Проектирование интерфейсов весна 2014 занятие 7
Проектирование интерфейсов весна 2014 занятие 7Проектирование интерфейсов весна 2014 занятие 7
Проектирование интерфейсов весна 2014 занятие 7
 
Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3
 

Ähnlich wie Java осень 2014 занятие 8

Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)Noveo
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. DatabasesSergey Nemchinsky
 
Java осень 2012 лекция 8
Java осень 2012 лекция 8Java осень 2012 лекция 8
Java осень 2012 лекция 8Technopark
 
Java осень 2012 лекция 9
Java осень 2012 лекция 9Java осень 2012 лекция 9
Java осень 2012 лекция 9Technopark
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGAndrey Rebrov
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Noveo
 
Android осень 2013 лекция 6
Android осень 2013 лекция 6Android осень 2013 лекция 6
Android осень 2013 лекция 6Technopark
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Fedor Malyshkin
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEBAlexandre Kalendarev
 
Django Rest Framework vs Graph Ql
Django Rest Framework vs Graph QlDjango Rest Framework vs Graph Ql
Django Rest Framework vs Graph QlAttract Group
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Vladimir Kochetkov
 

Ähnlich wie Java осень 2014 занятие 8 (20)

Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. Databases
 
Java осень 2012 лекция 8
Java осень 2012 лекция 8Java осень 2012 лекция 8
Java осень 2012 лекция 8
 
Doctrine 2
Doctrine 2Doctrine 2
Doctrine 2
 
Java осень 2012 лекция 9
Java осень 2012 лекция 9Java осень 2012 лекция 9
Java осень 2012 лекция 9
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 
Android осень 2013 лекция 6
Android осень 2013 лекция 6Android осень 2013 лекция 6
Android осень 2013 лекция 6
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
 
Django Rest Framework vs Graph Ql
Django Rest Framework vs Graph QlDjango Rest Framework vs Graph Ql
Django Rest Framework vs Graph Ql
 
Drf vs Graphql
Drf vs GraphqlDrf vs Graphql
Drf vs Graphql
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 
Zend framework 2
Zend framework 2Zend framework 2
Zend framework 2
 

Mehr von Technopark

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeperTechnopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSTechnopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"Technopark
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"Technopark
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...Technopark
 

Mehr von Technopark (20)

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
 

Java осень 2014 занятие 8

  • 1. Углубленное программирование на Java Лекция 3.2 «ORM» Виталий Чибриков
  • 2. План лекции 2 1. ORM 2. Hibernate 3. HQL 4. DB Service
  • 3. Object-Relational Mapping 3 Связь между объектной моделью программы и реляционной моделью базы Пример Методы DAO принимают объекты и сохраняют их в базе Методы DAO возвращают объекты собирая их на основе запросов
  • 4. Java Persistence API 4 Package javax.persistence Аннотации @Entity: объект класса можно «переложить» в таблицу @Table: связывает класс и таблицу @Id: поле является первичным ключом в таблице @Column: связывает поле и колонку в таблице
  • 5. DataSet 5 DataSet ― объект содержащий данные одной строки таблицы На каждую таблицу свой DataSet Извлечение и вставку данных удобно проводить через DataSet-ы В терминах JPA DataSet это Entity
  • 6. DataSet 6 public class UsersDataSet { private long id; private String name; public UsersDataSet(long id, String name){ this.id = id; this.name = name; } public UsersDataSet(String name){ this.id = -1; this.name = name; } public String getName() { return name; } public long getId() { return id; } }
  • 7. DAO Data Access Object 7 Объект доступа к данным Шаблон проектирования скрывающий детали работы с базой Обычно один DAO на одну таблицу Высокоуровневый доступ к данным через DataSet-ы Варианты операций над базой: Вставка строки ― добавление DataSet Поиск строки по ключу ― возврат DataSet-а Поиск строк по признаку ― возврат List<DataSet> Удаление строки
  • 8. interface UsersDAO 8 public interface UsersDAO { UsersDataSet get(long id) throws SQLException; UsersDataSet getByName(String name) throws SQLException; void add(UsersDataSet dataSet) throws SQLException; void delete(long id) throws SQLException; }
  • 9. План лекции 9 1. ORM 2. Hibernate 3. HQL 4. DB Service
  • 10. Hibernate ORM библиотека для Java <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.33</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.7.Final</version> </dependency> </dependencies> 10
  • 11. Configuration 11 Configuration configuration = new org.hibernate.cfg.Configuration(); configuration.setProperty(propertyName, propertyValue); propertyName propertyValue hibernate.dialect org.hibernate.dialect.MySQLDialect hibernate.connection.driver_clas com.mysql.jdbc.Driver s hibernate.connection.url jdbc:mysql://localhost:3306/Lecture3 hibernate.connection.username tully hibernate.connection.password tully hibernate.show_sql true hibernate.hbm2ddl.auto update
  • 12. hibernate.hbm2ddl.auto 12 hibernate.hbm2ddl.auto Автоматически создает или проверяет схему базы при создании SessionFactory validate: проверяет схему, не внося изменений update: обновляет схему, если находит различия create: пересоздает схему create-drop: уничтожает схему при закрытии SessionFactory
  • 13. Session Factory 13 Фабрика, которая создает сессии Одна фабрика на поток Одна сессия на запрос
  • 14. Session Factory 14 StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder(); builder.applySettings(configuration.getProperties()); ServiceRegistry serviceRegistry = builder.buildServiceRegistry(); SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); System.out.append(transaction.getLocalStatus().toString()); session.close(); sessionFactory.close();
  • 15. Аннотации для DataSet-ов 15 import javax.persistence.*; @Entity @Table(name="users") public class UserDataSet { @Id @Column(name="id") @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @Column(name="name") private String name; … Перед созданием SessionFactory: configuration.addAnnotatedClass(UserDataSet.class); }
  • 16. Session 16 Основной интерфейс между приложением и библиотекой Время жизни сессии соответствует времени жизни транзакции Задача сеcсии ― работа с объектами проанотированными как @Entity public void save(UserDataSet dataSet){ Session session = sessionFactory.openSession(); Transaction trx = session.beginTransaction(); session.save(dataSet); trx.commit(); session.close(); } public UserDataSet read(long id){ Session session = sessionFactory.openSession(); return (UserDataSet)session.load(UserDataSet.class, id); }
  • 17. DAO 17 public class UserDataSetDAO { private SessionFactory sessionFactory; public UserDataSetDAO(SessionFactory sessionFactory){ this.sessionFactory = sessionFactory; } … }
  • 18. План лекции 18 1. ORM 2. Hibernate 3. HQL 4. DB Service
  • 19. HQL 19 Hibernate Query Language «Язык» написания запросов «к hibernate» Вместо написания запросов к базе – описание запроса вызовами методов сессии https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/ queryhql.html http://www.tutorialspoint.com/hibernate/ hibernate_query_language.htm
  • 20. HQL вставка 20 public void save(UserDataSet dataSet){ Session session = sessionFactory.openSession(); Transaction trx = session.beginTransaction(); session.save(dataSet); trx.commit(); session.close(); }
  • 21. HQL чтение 21 public UserDataSet read(long id){ Session session = sessionFactory.openSession(); return (UserDataSet) session.load(UserDataSet.class, id); }
  • 22. HQL поиск по ключу 22 public UserDataSet readByName(String name) { Session session = sessionFactory.openSession(); Criteria criteria = session.createCriteria(UserDataSet.class); return (UserDataSet) criteria.add(Restrictions.eq("name", name)).uniqueResult(); }
  • 23. HQL получение всех записей 23 public List<UserDataSet> readAll() { Session session = sessionFactory.openSession(); Criteria criteria = session.createCriteria(UserDataSet.class); return (List<UserDataSet>) criteria.list(); }
  • 24. План лекции 24 1. ORM 2. Hibernate 3. HQL 4. DB Service
  • 25. Database Service 25 DatabaseService – сервис скрывающий работу с базой При создании соединяется с базой В своих методах создает DAO JDBC TExecutor ― класс с типизированными методами для работы с запросами Hibernate Аннотации на все DataSet-ы, автоматическое создание схемы
  • 26. Database Service 26 Для каждой таблицы TableDAO ― объект доступа к данным таблицы с именем Table TableDataSet ― объект с данными одной строки таблицы с именем Table
  • 27. Спасибо за внимание Виталий Чибриков chibrikov@corp.mail.ru