gpt4 book ai didi

mysql - 你能在jpql中参数化where子句吗

转载 作者:行者123 更新时间:2023-11-29 21:41:42 25 4
gpt4 key购买 nike

我对 JPQL 不太熟悉,但我知道您可以通过执行以下操作来参数化条件:

 em.createQuery("SELECT p FROM Person p WHERE p.firstName = :name)
.setParameter("name","Bill");

或者:

em.createQuery("SELECT p FROM Person p WHERE p.firstName= ?1)
.setParameter(1,"Bill");

但是你可以参数化其他东西吗?通过参数化 WHERE 子句来表示条件。例如,您可以执行以下操作:

em.createQuery("SELECT p FROM Person p WHERE :criteria = Bill)
.setParameter("criteria","p.lastName");

我测试了上面的代码,但它不起作用,所以我的问题是:有没有办法在 JPQL 中参数化 WHERE 子句。或者是否有其他查询语言支持 WHERE 子句参数化?非常感谢!

最佳答案

试试这个

TypedQuery<Person> query = em.createQuery("SELECT p FROM Person p WHERE p.lastName = :lastName", Person.class);
query.setParameter("lastname", "Bill");

如果您想添加更多参数,那么

TypedQuery<Person> query = em.createQuery("SELECT p FROM Person p WHERE p.lastName = :lastName AND p.firstName = :firstName", Person.class);
query.setParameter("lastName", "Bill");
query.setParameter("firstName", "Jack");

创建查询后,您可以使用

query.getResultList();

如果您期望多个结果

query.getSingleResult();

如果您只期望一个结果(例如通过主键或唯一列查询)

For more information, refer to TypedQuery

回答评论中的问题:

a.要么有三个查询,并根据他们在 UI 中选择的内容使用查询

String query;
if (isFirstName) {
query = "SELECT p FROM Person p WHERE p.firstName = :searchCriteria"
} else if (isMiddleName) {
query = "SELECT p FROM Person p WHERE p.middleName = :searchCriteria"
} else {
query = "SELECT p FROM Person p WHERE p.lastName = :searchCriteria"
}
TypedQuery < Person > query = em.createQuery(query, Person.class);
query.setParameter("searchCriteria", "Bill");

b.更改搜索:

String searchCriteria = "p.lastName";
TypedQuery<Person> query = em.createQuery(("SELECT p FROM Person p WHERE " + searchCriteria + " = :name"), Person.class);
query.setParameter("name", "Bill");

*对于字符串比较,您还可以使用LIKE

关于mysql - 你能在jpql中参数化where子句吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34441998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com