У меня есть базовый API загрузки Spring в верхней части моей системы rdbms, я выполняю все операции, но когда речь идет о выборе данных из системы, моя конечная точка отображения GET имеет много проверок, которые решают, какой метод findbyAttributes следует вызвать.
Я создал несколько методов репозитория, таких как findbyId, findbyIdAndName findbyIdAndNameAndAge.
Но рассмотрим мой сценарий, в котором у меня около 30 столбцов в таблице, которые конечный пользователь может захотеть запросить в какой-то момент времени используя мою конечную точку GET, чего я достиг, но из-за увеличения количества запросов, приходящих на каждый столбец / атрибуты моей сущности, моя когнитивная сложность кода значительно возросла.
Я знаю, что должен быть какой-то другой способ, чем Вызов каждого метода findby за несколькими циклами if-else, что, мне кажется, слишком плохо.
В настоящее время мой код выглядит так -
public Page<myEntity> getDataFromDatabase(
@RequestParam(value = "id", required = false, defaultValue = "NA") String id,
@RequestParam(value = "name", required = false, defaultValue = "NA") String name,
@RequestParam(value = "age", required = false, defaultValue = "NA") String age,
@RequestParam(value = "address", required = false, defaultValue = "NA") String address,
Pageable pageable) {
Page<myEntity> finalData = null;
if (!id.equals("NA")
&& name.equals("NA")
&& age.equals("NA")
&& address.equals("NA")) {
finalData = service.findById(id, pageable);
} else if (id.equals("NA")
&& !name.equals("NA")
&& age.equals("NA")
&& address.equals("NA")) {
finalData = service.findByName(name, pageable);
} else if (id.equals("NA")
&& name.equals("NA")
&& !age.equals("NA")
&& address.equals("NA")) {
finalData = service.findByAge(age, pageable);
} else if (id.equals("NA")
&& name.equals("NA")
&& age.equals("NA")
&& !address.equals("NA")) {
finalData = service.findByAddress(address, pageable);
}else if (!id.equals("NA")
&& !name.equals("NA")
&& !age.equals("NA")
&& !address.equals("NA")) {
finalData = service.findByIdAndNameAndAgeAndAddress(id,name,age,address, pageable);
}else if (!id.equals("NA")
&& !name.equals("NA")
&& age.equals("NA")
&& address.equals("NA")) {
finalData = service.findByIdAndName(id,name, pageable);
}
// few more else if as new column is being added
// I think I did it but this will not last for long
}
Поймите, хочу ли я добавить все атрибуты findBy на основе упомянутых условных логик c.
Если кто-то может помочь в этом, что заставило бы мой день сиять.
Примечание. Я читал о Спецификации Jpa , где они отображаются как метод findAll logi c с несколькими спецификации, которые к тому же кажутся такими же, как каждый раз, когда мне нужно создать определенную базу условий, вызывающую каждый метод get.
Также, пожалуйста, дайте мне знать, если это правильный подход к go с, моя идея написать меньше кода с лучшими практиками, поэтому из конечной точки GET все методы findby JpaRepository могут быть вызваны только через каркас, мне не нужно писать несколько if-else.