- •Java и c# технологии прикладного програмирования
- •Java и c# технологии прикладного програмирования
- •Содержание
- •Введение
- •Лабораторная работа № 1 Коллекции c#
- •Цель работы
- •Теоретические сведения
- •Общие сведения о платформе .Net
- •Общие сведения о коллекциях c#
- •Обобщенные коллекции с#
- •Порядок выполнения лабораторной работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Получение информации о типе
- •Экземпляр типа Type
- •Получение экземпляра типа Type
- •Динамическая загрузка сборок
- •Динамическая загрузка типов
- •Исследование типа
- •Характеристики типа как целого
- •Члены класса
- •Динамическое создание объекта и вызов методов
- •Создание объекта по его типу
- •Динамический вызов методов
- •Использование интерфейсов
- •Позднее связывание
- •Динамическое приведение типов
- •Новые механизмы абстракции
- •Динамическое создание типов
- •Динамическое создание программного кода
- •Динамическое создание класса
- •Динамическое создание перечислений
- •Динамический "Hello World!"
- •Динамическое разворачивание циклов
- •Атрибуты
- •Атрибут это класс
- •Декларативное программирование
- •Код, выполняемый во время разработки
- •Использование атрибутов
- •Использование встроенных атрибутов
- •Определение и использование пользовательских атрибутов
- •Пример декларативного программирования
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Связный уровень взаимодействия ado.Net
- •Несвязный уровень взаимодействия ado.Net
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Связи между объектами в FluentNHibernate
- •Связь один к одному
- •Связь один ко многим
- •Связь многие ко многим
- •Способы выборки объектов в FluentNHibernate
- •Запросы NativeSql
- •Запросы по критерию
- •Запросы по образцу
- •Запросы hql
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Компиляция страниц по требованию
- •Страница asp.Net 2.0
- •Директива @Page
- •Жизненный цикл страницы
- •Новые свойства и методы объекта Page
- •Управление страницей
- •Установка выделения на элемент управления
- •Обновление данных без перезагрузки страницы
- •Отправка данных формы другой странице asp.Net
- •Шаблоны дизайна страниц
- •Создание шаблона дизайна
- •Создание страницы
- •Обработка шаблонов средой asp.Net
- •Использование разных шаблонов для разных браузеров
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Библиотеки модульного тестирования в .Net
- •Unit Testing Framework от Microsoft
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Контрольные вопросы
- •Рекомендованная литература
Способы выборки объектов в FluentNHibernate
В FluentNHibernateсуществует 4 способа выборки объектов:
NativeSQL;
запросы по критерию;
запросы по образцу;
язык запросов HQL (Hibernate Query Language).
Рассмотрим каждый из способов.
Запросы NativeSql
Механизм запрос NativeSQLпозволяет выполнять запросы, написанные на обычном языкеSQL. В метод просто передается запрос в виде текстовой строки.
Рассмотрим пример, в котором с базы данных выбирается набор объектов класса студент:
var list = session.CreateSQLQuery(
"SELECT Students.* FROM Students")
.AddEntity("Student", typeof(Student))
.List<Student>();
Как видно из примера, запрос на выборку просто передается в метод CreateSQLQuery сессии NHibernate. Запрос может быть любой сложности но при написании запросов с использованием NativeSQLнеобходимо задуматься, а какого типа будут объекты в возвращаемой коллекции.
Запросы по критерию
Вторым и очень удобным способом выборки объектов с базы является запрос по критерию.
Рассмотрим пример, в котором с базы выбираются все те же студенты по разным признакам.
В первом критерии выбираются студенты мужского пола:
ICriteria criteria1 = session.CreateCriteria(typeof(Student))
.Add(Expression.Eq("Sex", 'M'))
.SetMaxResults(10);
list = criteria1.List<Student>();
Во втором примере выбираются студенты, у которых имя начинается на букву К, список упорядочен по фамилии по возрастанию и по году рождения по убыванию:
ICriteria criteria2 = session.CreateCriteria(typeof(Student))
.Add(Expression.Like("FirstName", "K%"))
.AddOrder(Order.Asc("LastName"))
.AddOrder(Order.Desc("Year"));
list = criteria2.List<Student>();
В третьем примере выбирается список студентов, у которых год рождения находится между 1993 и 1994 годами:
ICriteria criteria3 = session.CreateCriteria(typeof(Student))
.Add(Expression.Between("Year", 1993, 1994));
list = criteria3.List<Student>();
Более детально с запросами по критерию можно ознакомиться в книге NHibernateinAction.
Запросы по образцу
Запросы по образцу основаны на создании объекта образца, который похож на объекты, которые необходимо выбрать с базы данных.
Рассмотрим пример запроса по образцу для студента. В примере создается объект шаблон с заполненными полями пола и года рождения. Потом на основании этого объекта создается пример, который потом передается в критерий.
//Создание объекта образца
Student s1 = new Student();
s.Sex = 'M';
s.Year = 1994;
//Создание примера
Example example = Example.Create(s1)
.ExcludeZeroes()
.ExcludeProperty("Year")
.IgnoreCase()
.EnableLike();
//Передача примера в качестве параметра в критерий
ICriteria criteria5 = session.CreateCriteria(typeof(Student))
.Add(example);
list = criteria5.List<Student>();
Запросы hql
Кроме трех выше описанных способов существует еще один очень удобный способ выборки объектов с базы данных – язык запросов HQL, который позволяет полностью абстрагироваться от реляционных баз данных и заставить программиста мыслить исключительно объектами домена.
Рассмотрим пару примеров запросов на HQL.
В первом примере выбираются все студенты с именем Кристина:
IQuery query = session.CreateQuery("from Student as stud where stud.FirstName = :Name");
query.SetAnsiString("Name", "Kristina");
list = query.List<Student>();
Во втором примере выбираются фамилии всех студентов,у которых имя группы похоже на«KI-»:
IQuery query1 = session.CreateQuery("select st.LastName from Student as st inner join st.Group as gr where gr.GroupName like 'KI-%'");
IList<String> list1 = query1.List<String>();
Более подробно с запросами HQL можно ознакомиться в книге NHibernateinAction.