Проверка бобов против динамических запросовJAVA

Программисты JAVA общаются здесь
Anonymous
Проверка бобов против динамических запросов

Сообщение Anonymous »

Я обнаружил, что проверка параметров и динамическая конструкция запросов совпадает с очень похожими структурами кода. < /p>
Например, с учетом простого класса: < /p>
public class User {
private String name;
private Integer age;

// getters and setters
}
< /code>
Код проверки (Руководство) < /p>
public void validate(User user) {
if (user.getName() == null || user.getName().isBlank()) {
throw new IllegalArgumentException("name can not be empty");
}
if (user.getAge() == null) {
throw new IllegalArgumentException("age can not be empty");
}
if (user.getAge() < 18 || user.getAge() > 60) {
throw new IllegalArgumentException("age should be between 18 and 60");
}

// business logic
}
< /code>
и код динамического запроса выглядит так: < /p>
public static String buildWhere(UserQuery query, List argList) {
StringJoiner where = new StringJoiner(" AND ", " WHERE ", " ");
where.setEmptyValue(" ");

if (query.getName() != null && !query.getName().isBlank()) {
where.add("name LIKE ?");
argList.add(query.getName());
}

if (query.getAge() != null) {
where.add("age = ?");
argList.add(query.getAge());
}

return where.toString();
}

Код проверки может быть легко заменен на декларативную структуру проверки валидации, такую ​​как jakarta Validation (ранее проверка бобов ):
public class User {
@NotBlank
private String name;

@NotNull
@Range(min = 18, max = 60)
private Integer age;

// getters and setters
}
< /code>
Итак, есть ли аналогичное решение для генерации динамических запросов, чтобы отобразить условие с помощью аннотаций, таких как: < /p>
public class UserQuery {
@Condition("name LIKE ?)
private String name;

@Condition("age = ?")
private Integer age;
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... ic-queries

Вернуться в «JAVA»