使用“%”标准搜索 sql 原生 sql
Search like sql using '%' criteria native sql
我有一个代码可以连接 PL/SQL 搜索就像使用 '%' 并且我使用标准来实现
String sql = "SELECT * FROM EMPLOYEE ";
Query query = entityManager.createNativeQuery(sql.toString());
if(searchCharacterInfo.getKeyword() != null){
sql += " WHERE NAME LIKE %:keyword% ";
query = entityManager.createNativeQuery(sql).setParameter("keyword", keyword);
}
List<Object> res = query.getResultList();
return res;
当我运行这段代码显示错误时:
Could not locate named parameter keyword
请帮我解决这个问题!
参数占位符不是盲目地替换为占位符值,所以%:keyword%
不是合法的语法。
您需要在 SQL 中包含 LIKE :keyword
,并从 Java 侧将关键字作为 "%" + keyword + "%"
传递。
或者,您可以在 SQL 端连接字符串:LIKE ('%' || :keyword || '%')
.
假设您有一个模型 class EMPLOYEE。所以你可以写标准如下:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<EMPLOYEE> cq = cb.createQuery(EMPLOYEE.class);
Root<EMPLOYEE> employee = cq.from(EMPLOYEE.class);
cq.select(employee);
List<Predicate> predicates = new ArrayList<>();
if (searchCharacterInfo.getKeyword() != null) {
predicates.add(cb.like(employee.get("name"), "%" + searchCharacterInfo.getKeyword() + "%"));
}
cq.where(predicates.toArray(new Predicate[0]));
List<EMPLOYEE> res = entityManager.createQuery(cq).getResultList();
我有一个代码可以连接 PL/SQL 搜索就像使用 '%' 并且我使用标准来实现
String sql = "SELECT * FROM EMPLOYEE ";
Query query = entityManager.createNativeQuery(sql.toString());
if(searchCharacterInfo.getKeyword() != null){
sql += " WHERE NAME LIKE %:keyword% ";
query = entityManager.createNativeQuery(sql).setParameter("keyword", keyword);
}
List<Object> res = query.getResultList();
return res;
当我运行这段代码显示错误时:
Could not locate named parameter keyword
请帮我解决这个问题!
参数占位符不是盲目地替换为占位符值,所以%:keyword%
不是合法的语法。
您需要在 SQL 中包含 LIKE :keyword
,并从 Java 侧将关键字作为 "%" + keyword + "%"
传递。
或者,您可以在 SQL 端连接字符串:LIKE ('%' || :keyword || '%')
.
假设您有一个模型 class EMPLOYEE。所以你可以写标准如下:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<EMPLOYEE> cq = cb.createQuery(EMPLOYEE.class);
Root<EMPLOYEE> employee = cq.from(EMPLOYEE.class);
cq.select(employee);
List<Predicate> predicates = new ArrayList<>();
if (searchCharacterInfo.getKeyword() != null) {
predicates.add(cb.like(employee.get("name"), "%" + searchCharacterInfo.getKeyword() + "%"));
}
cq.where(predicates.toArray(new Predicate[0]));
List<EMPLOYEE> res = entityManager.createQuery(cq).getResultList();