Как использовать метод "findBy"? - PullRequest
0 голосов
/ 03 июля 2018

Я довольно новичок в программировании, поэтому, пожалуйста, помилуйте:)

Мне нужно поработать над проектом с помощью Spring, и в настоящее время у меня возникают трудности с использованием метода findBy.

Я хочу создать систему папок, в которой вы можете видеть каждую папку, которой другие пользователи делятся, установив private boolean shared = true;

Следующее, что я сделал, это отредактировал класс обслуживания «папки», и я хочу написать что-то вроде этого:

public List<Folder> getsharedFolder() {
    return folderRepository.findBy___();
}

Как я могу точно получить папки, в которых булевому «общему» было присвоено значение true?

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Использование JPARepository вместо CRUDRepository

Entity

@Entity
public class Folder {
    @Id
    @GeneratedValue
    private Integer FolderID;
    @Column(unique = true)
    private String Foldername;
    private boolean geteilt = false;

    public Integer getFolderID() {
        return FolderID;
    }

    public void setFolderID(Integer folderID) {
        FolderID = folderID;
    }

    public String getFoldername() {
        return Foldername;
    }

    public void setFoldername(String foldername) {
        Foldername = foldername;
    }



    public boolean isGeteilt() {
        return geteilt;
    }

    public void setGeteilt(boolean geteilt) {
        this.geteilt = geteilt;
    }

}

Репозиторий

public interface FolderRepository extends JpaRepository<Folder, Integer>{

    List<Folder> findByGeteilt(boolean shared);

}

Тест

@RunWith(SpringRunner.class)
@DataJpaTest
public class FolderTest{

    @Autowired
    private TestEntityManager entityManager;

    @Autowired
    private FolderRepository folderrepo;


    @Test
    public void whenFindByshared() {

        // given

        Folder folder = new Folder();
        folder.setFolderID(1);
        folder.setFoldername("folder1");
        folder.setGeteilt(true);

        Folder folder1 = new Folder();
        folder1.setFolderID(2);
        folder1.setFoldername("folder2");
        folder1.setGeteilt(true);

        Folder folder2 = new Folder();
        folder2.setFolderID(1);
        folder2.setFoldername("folder3");
        folder2.setGeteilt(false);

        folderrepo.saveAndFlush(folder);
        folderrepo.saveAndFlush(folder1);
        folderrepo.saveAndFlush(folder2);

        // when

        List<Folder> sharedFolders =new ArrayList<>();
        sharedFolders = folderrepo.findByGeteilt(true);

        assertThat(sharedFolders.get(0).getFoldername())
          .isEqualTo(folder1.getFoldername());


    }

}

Resultat

test success

0 голосов
/ 03 июля 2018

Из того, что я знаю о методе "findBy", функция сможет работать, если вы зададите логическое значение в качестве критерия поиска (см. Документацию на этом веб-сайте: https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/FindBy.html).

Тем не менее, вы можете создать атрибут, который представляет собой строковый вариант логического значения (например, сохранить строковое значение для true / false). Метод findBy должен нормально работать в этом случае.

Если вы не хотите добавлять дополнительный компонент, вы можете попробовать унаследовать класс, а затем переопределить метод (создать суперкласс), который также проверит логический компонент (возможно, расширить функциональность?). Однако я не уверен, как бы вы это реализовали, и это скорее абстрактная идея, чем реальное предложение

0 голосов
/ 03 июля 2018

Вы можете добавить этот метод:

 List<Folder> findBySharedTrue();

На вашем FolderRepository классе:

public interface FolderRepository extends CrudRepository<Folder, Integer> {
     List<Folder> findBySharedTrue();
}

Он будет использовать поле shared от сущности Folder и вернет только папки с полем shared, равным true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...