java осень 2012 лекция 9

20
Лекция 9. «ORM»

Upload: technopark

Post on 04-Jul-2015

93 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java осень 2012 лекция 9

Лекция 9. «ORM»

Page 2: Java осень 2012 лекция 9
Page 3: Java осень 2012 лекция 9

Содержат данные о программе не являясь частью программы

Могут влиять на работу компилятора, инструметов и библиотек

Не влияют непосредственно на работу приложения

Влияют только на ту функциональность, которая их обрабатывает

“Decorating” or “wrapping” классы в runtime

Page 4: Java осень 2012 лекция 9

@Testpublic void unitTestSomething(){…}

@Deprecatedclass oldClass{…}

@NotNullprivate Object object;

public int getUserId(@Nullable User user){…}

Page 5: Java осень 2012 лекция 9

Обозначает устаревшую фукциональность

Отмечает методы, кторые переопределяют методы базового класса

Deprecated методы могут бять удалены в следующих версиях

Компилятор проверяет сигнатуры методов

Указание компилятору не сообщять об проблемах типа «warning»

Page 6: Java осень 2012 лекция 9

@interface CreatedBy { String author(); String date();

}

Не может наследовать или быть базовым классом

Может содержать методы без переменных, которые работают как поля

Не содержит конструкторов и полей

@CreatedBy (author = “tully”, date = “04.12.2012”)public class MyClass {…}

@CreatedBy (author = “tully”, date = “05.12.2012”)public static void main(String args[])

Page 7: Java осень 2012 лекция 9

Class myClass = MyClass.class;Method method = myClass.getMethod(“main”);

CreatedBy annotationC = myClass.getAnnotation(CreatedBy.class);CreatedBy annotationM = method.getAnnotation(CreatedBy.class);

log.info(“Author of the class: ” + annotationC.author());log.info(“Date of Writing the class: ” + annotationC.date());log.info(“Author of the method: ” + annotationM.author()); log.info(“Date of Writing the method: ” + annotationM.date());

Page 8: Java осень 2012 лекция 9

RetentionPolicy.SOURCE – аннотации присутствую только в коде

RetentionPolicy.CLASS – аннотации сохранеы в .class, но не доступны в runtime

Информация для компилятора

Информация для библиотек

Не доступны через reflection

Информация для инструментов IDE

RetentionPolicy.RUNTIME – аннотации сохранены в .class и доступны в runtime

Аннотации можно получать из getClass() через reflection

Page 9: Java осень 2012 лекция 9

@Retention(RetentionPolicy.RUNTIME)@interface CreatedBy {

String author(); String date();

}

@Retention – аннотация для указания типа аннотации

Page 10: Java осень 2012 лекция 9
Page 11: Java осень 2012 лекция 9

Связь между объектной моделью программы и реляционной моделью базы

Пример:

Методы DAO принимают объекты и сохраняют их в базе

Методы DAO возвращают объекты собирая их на основе запросов

Page 12: Java осень 2012 лекция 9
Page 13: Java осень 2012 лекция 9

http://sourceforge.net/projects/hibernate/files/hibernate4/4.1.8.Final/

Подключить к проекту все jar файлы из

Подключить к проекту драйвер базы данных:

Скачать Hibernate:

mysql-connector-java-5.1.22-bin.jar

./lib/required

Page 14: Java осень 2012 лекция 9

Configuration configuration = new org.hibernate.cfg.Configuration();

configuration.setProperty(propertyName, propertyValue);

propertyName propertyValue

hibernate.dialect org.hibernate.dialect.MySQLDialect

hibernate.connection.driver_class com.mysql.jdbc.Driver

hibernate.connection.url jdbc:mysql://localhost:3306/Lecture8

hibernate.connection.username tully

hibernate.connection.password tully

hibernate.show_sql true

hibernate.hbm2ddl.auto update

Page 15: Java осень 2012 лекция 9

ServiceRegistryBuilder builder = new ServiceRegistryBuilder();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();

Фабрика которая создает сессии

Одна фабрика на приложение

Одна сессия на поток

Page 16: Java осень 2012 лекция 9

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;…

}

configuration.addAnnotatedClass(UserDataSet.class);

Перед созданием SessionFactory:

Page 17: Java осень 2012 лекция 9

Основной интерфейс между приложением и библиотекой

Время жизни сессии соответствует времени жизни транзакции

Задача сесии – работа с объектами проанотированными как @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);

}

Page 18: Java осень 2012 лекция 9
Page 19: Java осень 2012 лекция 9

1. История и особенности языка Java.2. Платформа Java. Java Editions. GC, JVM, JDK, JRE. ByteCode.3. Правила наименований. Запуск java приложений.4. class Object и class Class<?>.5. Простые типы в Java. Классы обертки простых типов.6. Generics.7. Коллекции в Java. Iterator, Iterable.8. Processes and Threads.9. Interface Runnable. class Thread. Методы start() и run().10 Методы класса Thread: sleep(), interrupt(), join().11. Ключевое слово synchronized.12. Проблемы многопоточного доступа к данным. Race condition. 13. Deadlock. wait() и notify().14. Плюсы и минусы многопоточных приложений.15. Способы взаимодействия потоков.16. MessageSystem. Address и Abonent.17. Распределение классов по пакетам. Циклические зависимости.18. Архитектура игрового сервера.19. Процесс работы игрового сервера, репликация.20. Виды тестирования.21. GC. Виды GC. Параметры GC. Принципиальное устройство GC.22. Random.23. Singleton и Context.24. Events, подписка на события.25. Callback.

26. Анонимные классы.27. Работа со временем и датой. Unix time. Locale.28. I/O Streams. Потоки байт и потоки символов.29. Сериализация/десериализация. Interface Serializable.30. Ключевое слово transient.31. Reflection. Роль reflection в сериализации.32. Factory method pattern.33. SAX парсер.34. DOM парсер.35. ResourceFactory. Роль ресурсов в игре.36. JDBC API.37. Драйвер базы данных.38. class Connection.39. Dependency Injection.40. Statement.41. ResultSet.42. Transactions.43. DataSet.44. DAO.45. Annotation.46. Object Relational Mapping.47. Frontend.48. Game Mechanics.49. Resource System.50. Database System.

Page 20: Java осень 2012 лекция 9