私はjavaで検索ツールを作った。JPAクエリのクエリビルダ?
これらparameretsのすべてが値を持っている場合は、これを出力リレー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 + "' ";
:
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
ええ、私は知っています。しかし、これは例を与えることでした:-)ありがとう! –