Предисловие
Основное введение в Spring-Data-JPA: причина рождения JPA заключается в интеграции сторонних каркас ORM и установление стандартного метода. Энциклопедия Baidu говорит, что JDK развивается в этом направлении, чтобы достичь единства ORM. Тем не менее, он не был полностью реализован. В рамках ORM Hibernate является большой армией, широко используемой, удобной и обладающей сильными возможностями. В то же время Hibernate также хорошо интегрирован с JPA. Мы можем думать, что JPA является стандартом, и на самом деле JPA - это почти все интерфейсы, и все реализации выполняются Hibernate. С точки зрения макроса, Hibernate очень хорошо работает под объединением JPA.
Недавно я использовал JPA Springboot и Spring Data. Использование JPA может сделать меня более удобным для управления базой данных, но я столкнулся с множеством ловушек во время использования. Я запишу следующую статью. Я не скажу многое ниже. Давайте посмотрим на подробное введение вместе.
Сцена:
Динамический запрос, запрос на пьесу, запрос различных таблиц данных в соответствии с различными состояниями, передаваемыми, и используйте карту для преобразования VO перед передачей в объекте страницы. Различные места использования переноса влияют на правильность данных, поэтому мы обсудим их.
Предпосылка:
Объект страницы заключен в VO, а данные о возврате включают данные по странице
@Apimodelproperty («record») частная страница <ActivityRecordvo> activityRecordvolist; @apimodelproperty («Количество») частное целое число = 0; @apimodelproperty («сумма») частное BigDecimal TotalMoney = BigDecimal.Valueof (0);
Неправильное приложение:
Список <ActivityRecordvo> activityRecordVolist = new ArrayList <> (); if (получается enderecordrequestvo.getsendorreceivetype () == sendorreceivetype.receive) {list <chelcomerecord> ChallengereCordlist = ChallengerCorddao.findbyuseridAnddeletepe (UseriD, deletEtype.false); if (! collectiontils.isempty (ChallengerCordlist)) {ActivityRecordVolist = ChallengerCordlist.Stream () .map (это :: ChallengerCordToActivityRecordVo) .collect (collectors.tolist ()); }} else if (получается endereCordRequestvo.getSendorReceiveType () == sendorReceiveType.send) {list <Activity> ActivityList = ActivityDao.FindbyUseridDeleteTepe (userId, deletETYPE.False); if (! CollectionTils.isempty (ActivityList)) {ActivityRecordVolist = ActivityList.Stream () .map (this :: ActivityToActivityRecordVO) .collect (collectors.tolist ()); }}ActivityReceivesendRecordvo.setActivityRecordVolist (новый PageImpl <> (ActivityRecordVolist, Pagable, ActivityRecordvolist.size ()));
Анализ: Проданная накладная использует только New PageIml для преобразования списка в объект страницы, когда установлен в Vo. Хотя общее количество страниц и общее количество строк, представленных на переднем конце, является правильным, количество строк на первой странице все, и данные являются ненормальными!
Правильный справочный метод:
Используйте спецификации для динамического запроса и наметить соответствующий объект Paging в соответствии с условиями запроса (этот код блока варьируется в зависимости от требований). В настоящее время переносится в Findall, и будет отображаться правильная информация о пейджинге.
Ссылка на блок кода:
xxxcommonspecutil-это самопровозглашенный класс инструмента спецификации, аналогичный нативному методу собственности JPA.
Page <CimivityRecordvo> page = new PageImpl <> (ActivityRecordvolist, Pagable, ActivityRecordVolist.size ()); if (atesendRecordRequestvo.getsendorreceiveType () == sendorReceiveType.receive) {Спецификации <lampengerecord> spectiptions.where (ChallengeCommonSpecutil.Equal («UseriD», UserId)) page = ChallengerCorddao.findall (Spec, Pagable) .map (это :: ChallengerCordToActivityRecordVo); } else if (получается endercordrequestvo.getsendorreceivetype () == sendorreceivetype.send) {Спецификации <Activity> spectiptions.where (ActivityCommonSpecutil.Equal («userid», userId)) page = activitydao.findall (spec, pagable) .map (это :: activitytoactivityRecordvo); }Примечание: ActivityReceivesendRecordvo является инкапсулированным VO, который содержит возвращенную объект страницы
ActivityReceivesendRecordvo.setActivityRecordVolist (Page);
Суммировать
После использования DATA Data JPA так долго, я думаю, что спецификации очень полезны и не подвержены ошибкам. Это также мой любимый стиль кодирования. Тем не менее, я обычно использую простой и грубый метод New PageImpl <> () для запроса данных и связываю слишком много таблиц. Я вернусь прямо в конце. Более глубокий уровень должен быть обсужден снова!
Хорошо, вышеупомянутое содержимое этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.