В приведенной выше статье мы завершили реализацию меню EasyUI. Нажмите здесь, чтобы просмотреть его. В этом разделе мы будем в основном написать о классе реализации CategoryServiceImpl для завершения каскадного запроса базы данных. Как правило, проект осуществляется сзади на переднюю часть, сначала сделайте услугу (мы не извлекали DAO и, наконец, извлекли), а затем выполняли верхний слой после завершения.
Перед написанием давайте посмотрим на таблицы в базе данных:
бросить базу данных, если существует магазин; /*Создать базу данных и установить кодирование*/ Создание базы данных Shop Shop Set Semall Set UTF8; Используйте магазин; /*Удалить таблицу администратора*/ Drop Table, если существует учетная запись; /*Удалить таблицу категории продукта*/ Drop Table, если существует категория; /*============================================================================================= ============================================================================================= ============================================================================================ ============================================================================================= Имя входа в систему администратора*/ login varchar (20),/*Имя администратора*/ name varchar (20),/*пароль администратора*/ pass varchar (20)); /*========================================================================================================================= ==================================================================================================================== ==================================================================================================================== ======================================================================================================== false, /* иностранная ключ, который администратор управляет этой категорией* / account_id int, ограничение AID_FK Foreign Key (Account_ID) Ссылки Account (ID));
В таблице категории продуктов и таблица администратора есть в основном две таблицы, таблица категории продуктов, а в таблице категории продукта представлена таблица, связанная с иностранным ключом. То есть продукт и администратор-это отношения между ними. Теперь мы начинаем писать информацию о категории для запроса продуктов, и нам нужен каскадный администратор.
1. Реализовать метод каскадного запроса
Во -первых, определите этот метод в интерфейсе CategoryService:
Общедоступный интерфейс CategoryService Extends BaseService <Категория> {// Информация о категории запросов, общедоступный список администраторов <Категория> QueryJoinaccount (String Type); // Запрос с именем категории} Затем мы реализуем этот метод в категории классов реализации.
@Service ("CategoryService") Общедоступный класс CategoryServiceImpl Extends BaseServiceImpl <Категория> реализует CategoryService {@Override Public List <Категория> QueryJoinaccount (String Type) {String hql = "из категории C, где c.type like: type"; return getSession (). CreateQuery (hql) .setString ("type", "%" + type + "%"). List (); }} Среди двух моделей мы назначим ссылку на аннотацию:
// @manytoone (fetch = fetchtype.eager) @joincolumn (name = "account_id") public account getAccount () {return this.account; } // @onetomany (cascade = cascadetype.all, fetch = fetchtype.lazy, mapedby = "account") public set <Категория> getCategories () {return this.categories; } Затем мы проверяем его в тестовом классе:
@Runwith (springjunit4classrunner.class) @contextconfiguration (locations = "classpath: beans.xml") открытый категория класса. @Test public void testqueryjoinaccount () {for (категория C: CategoryService.queryJoinaccount ("")) {System.out.println (c); System.out.println (c.getAccount ()); }}} 2. Проблемы с каскадными запросами
Если мы посмотрим на вывод консоли, мы увидим, что она отправила более одного оператора SQL, но мы только один раз запросили его, так почему мы отправляем столько операторов? Это общая проблема 1+n. Так называемая проблема 1+N состоит в том, чтобы сначала выпустить заявление, чтобы запросить текущий объект, а затем выпустить операторы N, чтобы запросить связанный объект, чтобы эффективность становилась очень низкой. Здесь есть только два объекта. Если есть больше объектов, эффективность будет значительно снижена. Как мы должны решить эту проблему?
Может быть, вы подумаете, что если вы установите Fetch для генерации FetchType.lazy, вы не будете публиковать несколько операторов, но это определенно невозможно, потому что после установки его ленивым мы не сможем получить объект учетной записи. Лучшее решение - написать оператор HQL сами и использовать Join Fetch. Для получения подробной информации, посмотрите на класс реализации CategoryServiceImpl:
@Service ("CategoryService") Общедоступный класс CategoryServiceImpl Extends BaseServiceImpl <Категория> реализует категорию service {@Override public list <Категория> QueryJoinaccount (String Type) {string hql = "из категории C левшевой присоединение Fetch C.Ccount, где c.type like: type"; return getSession (). CreateQuery (hql) .setString ("type", "%" + type + "%"). List (); }} Left Join означает, что нужно запросить учетную запись, Fetch означает добавление объекта учетной записи в категорию, так что будет отправлен только один оператор SQL, а возвращенная категория также содержит объект учетной записи.
3. Завершите функцию пейджинга
Парень в Hibernate очень проста. Вам нужно только позвонить в два метода SetFirStresult и SetMaxResults: давайте изменим интерфейс категории и его классы реализации CategoryServiceImpl:
// CategoryService Public Interface CategoryService Extends BaseService <Category> {// Информация о категории запросов, общедоступный список администратора Cascading <Категория> Queryjoinaccount (тип строки, int page, int size); // и реализация страниц} // CategoryServiceImpl @Service ("CategoryService") Общедоступный класс CategoryServiceImpl Extends BaseServiceImpl <Категория> реализует категорию Service {@Override Public List <Категория> QueryJoinaccount (String Type, int page, int size) {string hql = "из категории Query in join quect Quctount write quascount: type -st. return getSession (). CreateQuery (hql) .setString ("type", "%" + type + "%") .setFirstresult (((Page-1) * size) // show .setMaxResults (size) // Показать несколько .list (); }} Давайте проверим это в тестовом классе:
@Runwith (springjunit4classrunner.class) @contextconfiguration (locations = "classpath: beans.xml") открытый категория класса. @Test public void testqueryjoinaccount () {for (категория C: CategoryService.QueryJoinaccount ("", 1,2)) {// Показать первую страницу, 2 части данных на страницу System.out.println (c + "," + c.getaccount ()); }}} С этой целью мы закончили написание метода обслуживания и завершили каскадные запросы и функции подкидки категорий продуктов.
(Примечание: В конце концов, я предоставлю исходный код загрузку всего проекта! Приглашаем ли каждый сбор или поделиться)
Оригинальный адрес: http://blog.csdn.net/eson_15/article/details/51320212
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.