Я изучаю JDBC и думаю, что было бы забавно, если бы я передал карту значений для изменений и карту условий для метода update().
У меня есть что-то вроде:
public void update(Map<String, Serializable> valuesToChange, Map<String, Predicate<T>> mapOfConditions){...}
Как я могу получить строку теста предиката?
Допустим, у меня есть:
predicateMap.put("id", id -> (int) id > 20);
predicateMap.put("last_name", lastName -> lastName == "Jobs");
Как получить условия в String, например:
lastName == "Вакансии" или id > 20
Мне это нужно как условие WHERE в SQL Query.
Ваше здоровье
Если у меня есть предикат: id -> id == 20, я хочу получить строку: "id == 20"
Я не понимаю, что это значит. Может быть, если бы вы показали, как собираетесь его использовать...
Я хочу преобразовать лямбда IN CODE в строковую форму. Я хочу использовать эту форму String позже в SQL-запросе. Итак, если у меня есть предикат: зарплата -> зарплата> 20000, я хочу получить строку «зарплата> 20000», чтобы использовать ее позже, например: «SELECT * WHERE зарплата> 20000;»
Lambdas — это элемент синтаксиса времени компиляции. В этом случае во время выполнения они просто Predicate
объекты. Нет никакого способа изучить логику, которую они реализуют. Вместо того, чтобы хранить Predicate
, сохраните Pair<Predicate, Something>
, где Something
генерирует SQL, необходимый для соответствующей проверки.
То, о чем вы просите, почти невозможно. Это потребует от вас обратной компиляции байтового кода в предикате на Java и оттуда перевода Java на SQL. Я не могу поверить, что вы захотите взять на себя труд, в том числе потому, что выигрыш будет минимальным.
Это может показаться простым в случае, когда предикат id -> id == 20
. Однако предикаты могут быть сложными. Они могут включать конструкции языка Java, не имеющие прямого аналога SQL. Они могут включать вызовы библиотечных методов, в том числе методов сторонних библиотек, даже удаленных служб и кода, написанного не на Java, а на других языках. Я не вижу возможности перевести все это на SQL.
Я не понимаю. Вы пытаетесь разобрать строку и найти/построить соответствующий объект
Predicate
?