java осень 2012 лекция 9
TRANSCRIPT
Лекция 9. «ORM»
Содержат данные о программе не являясь частью программы
Могут влиять на работу компилятора, инструметов и библиотек
Не влияют непосредственно на работу приложения
Влияют только на ту функциональность, которая их обрабатывает
“Decorating” or “wrapping” классы в runtime
@Testpublic void unitTestSomething(){…}
@Deprecatedclass oldClass{…}
@NotNullprivate Object object;
public int getUserId(@Nullable User user){…}
Обозначает устаревшую фукциональность
Отмечает методы, кторые переопределяют методы базового класса
Deprecated методы могут бять удалены в следующих версиях
Компилятор проверяет сигнатуры методов
Указание компилятору не сообщять об проблемах типа «warning»
@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[])
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());
RetentionPolicy.SOURCE – аннотации присутствую только в коде
RetentionPolicy.CLASS – аннотации сохранеы в .class, но не доступны в runtime
Информация для компилятора
Информация для библиотек
Не доступны через reflection
Информация для инструментов IDE
RetentionPolicy.RUNTIME – аннотации сохранены в .class и доступны в runtime
Аннотации можно получать из getClass() через reflection
@Retention(RetentionPolicy.RUNTIME)@interface CreatedBy {
String author(); String date();
}
@Retention – аннотация для указания типа аннотации
Связь между объектной моделью программы и реляционной моделью базы
Пример:
Методы DAO принимают объекты и сохраняют их в базе
Методы DAO возвращают объекты собирая их на основе запросов
http://sourceforge.net/projects/hibernate/files/hibernate4/4.1.8.Final/
Подключить к проекту все jar файлы из
Подключить к проекту драйвер базы данных:
Скачать Hibernate:
mysql-connector-java-5.1.22-bin.jar
./lib/required
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
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();
Фабрика которая создает сессии
Одна фабрика на приложение
Одна сессия на поток
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:
Основной интерфейс между приложением и библиотекой
Время жизни сессии соответствует времени жизни транзакции
Задача сесии – работа с объектами проанотированными как @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);
}
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.