Я создал инструмент поиска в java.sql Query builder в запросе JPA?
String query = "SELECT * FROM Customer WHERE 1 = 1 ";
if (!firstname.isEmpty()) query += "AND cName = '" + firstname + "' ";
if (!lastname.isEmpty()) query += "AND cLastName = '" + lastname + "' ";
if (!epost.isEmpty()) query += "AND cEpost = '" + epost + "' ";
if (!phonenumber.isEmpty()) query += "AND cPhonenumber '" + phonenumber + "' ";
Это Ouput это, если все эти paramerets имеет значения:
SELECT * FROM Customer WHERE 1 = 1
AND cName = 'test'
AND cLastName = 'test1'
AND cEpost = 'test2'
AND cPhonenumber 'test3'
Это так, как я могу получить лучшие результаты путем заполнения дополнительных данных, но я все еще могу выбрать, чтобы не делать .. мне нужно решение для JPA для этого .. любые советы?
Спасибо!
EDIT: Конечный результат на основе ответа ниже:
public static List<Customer> searchCustomersByParameters(String firstname, String lastname,
String epost, String phonenumber) {
String sql = "SELECT c FROM Customer c WHERE 1 = 1 ";
if (!firstname.isEmpty()) sql += "AND c.cName = :firstname ";
if (!lastname.isEmpty()) sql += "AND c.cLastName = :lastname ";
if (!epost.isEmpty()) sql += "AND c.cEpost = :epost ";
if (!phonenumber.isEmpty()) sql += "AND c.cPhonenumber = :phonenumber";
Query q = em.createQuery(sql);
if (!firstname.isEmpty()) q.setParameter("firstname", firstname);
if (!lastname.isEmpty()) q.setParameter("lastname", lastname);
if (!epost.isEmpty()) q.setParameter("epost", epost);
if (!phonenumber.isEmpty()) q.setParameter("phonenumber", phonenumber);
return q.getResultList();
}
Примечание стороны: вы не должны делать это так: Если только один из параметров не правильно спасся, [каждый может выполнить произвольный код SQL] (https://en.wikipedia.org/wiki/SQL_injection). Используйте '?' В качестве заполнителей при построении запроса, а затем используйте подготовленные инструкции для автоматического выхода из всех параметров. – BackSlash
Да, я знаю. Но это должно было привести пример :-) Спасибо! –