Java Интерфейс репозитория Spring MongoDB - PullRequest
0 голосов
/ 03 апреля 2020

Итак, у меня есть класс AppUser:

    @Data
    @Builder
    @Document(collection = "app_users")
    @Component
    @AllArgsConstructor
    @NoArgsConstructor
    @Import(AppConfig.class)
    public class AppUser {

      @Id
      @NotBlank(message = ErrorConstants.ANDROID_USER_ACCOUNT_MANAGER_ID_IS_NULL)
      private String androidUserAccountManagerId;

      @NotBlank(message = ErrorConstants.NULL_NAME)
      private String name;

      private Friend bestFriend;

      @Setter(AccessLevel.NONE)
      private FriendList friendList;

      private boolean manualBestFriendOverride;

      public Optional<Friend> getFriend(String friendName) {
        return friendList.getFriend(friendName);
      }

      public void calculateBestFriend() {
        if (!manualBestFriendOverride) {
          bestFriend = friendList.calculateAndReturnBestFriend();
        }
      }
    }

Я создал AppUserRepository интерфейс, который расширяет MongoRepository:

    @Repository
    public interface AppUserRepository extends MongoRepository<AppUser, String> {}

У меня есть класс WebController, который взаимодействует с интерфейсом. Поле AppUserRepository в этом классе - @Autowired. Кажется, что все это работает, но у меня есть несколько вопросов относительно того, как и как я go пересылаю и пишу интеграционные тесты для этого:

  1. Как мне настроить созданный AppUserRepository? Могу ли я запустить его на указанном c порту и c?
  2. Почему Autowiring работает, поскольку я не создал этот AppUserRepository Bean в AppConfig, как у меня есть другие Beans, которые Autowired в моем приложении.
  3. Если бы я должен был создать Бин, не пришлось бы мне также реализовать класс и вернуть экземпляр? Я начал это делать, но мне пришлось реализовать все методы классов MongoRepository, в которых я не был уверен, что это совершенно правильно.
  4. Как писать интеграционные тесты с AppUserRepository? Мне нужно AppUserRepository для моих запросов для взаимодействия, но я не хочу, чтобы это была та же БД, что и БД приложения реального времени, когда служба запущена и работает. Могу ли я @Autowire базу данных перейти в класс интеграционных тестов, а затем закрыть БД после запуска интеграционных тестов? Если я так go перехожу, думаю, мне нужно выполнить пункт 3 выше.

Заранее спасибо за помощь, я попытался прочитать некоторую документацию, но я думаю, что мне не хватает некоторых ключевые знания, которые означают, что все это довольно подавляющее и запутанное.

Спасибо!

1 Ответ

1 голос
/ 03 апреля 2020

Это на самом деле довольно большая история. Эта топика c называется Spring Data JPA, Hibernate. Возможно, вы захотите провести исследование по этому вопросу, посмотреть несколько уроков и так далее.

Вкратце, MongoRepository просто предоставляет вам множество методов, которые вы можете использовать. Вы также можете определить свои собственные методы, добавить запросы и т. Д. c.

Ваши начальные точки: https://www.baeldung.com/spring-boot-hibernate

https://www.baeldung.com/the-persistence-layer-with-spring-data-jpa

https://www.baeldung.com/spring-data-jpa-query

Конечно, вы можете установить номер порта (и некоторые другие свойства) через файл application.properties. Это список наиболее распространенных свойств, вы можете найти свойства для mongodb: https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html

Теперь о бобе. Вы в основном создали один с аннотацией @Repository. Поэтому Spring Context загружает его при запуске приложения. Вы можете подключить его автоматически.

...