小编Tac*_*529的帖子

使用谓词和条件API的不区分大小写的搜索

我目前已经实现了一个动态查询构建器,如果我的查询条件拼写正确,该构建器可以完美地工作。由于可能并非总是如此,因此我需要一个足够灵活的解决方案来适应条件的任何变化,主要是支持不区分大小写。

当前规范的toPredicate方法覆盖代码如下所示:

final List<Predicate> predicates = new ArrayList<Predicate>();

    Path<String> username = root.get("username");
    Path<String> agentCode = root.get("agentCode");
    Path<EntityStatus> status = root.get("status");
    Path<String> firstname = root.get("firstName");
    Path<String> lastname = root.get("lastName");
    Path<String> email = root.get("eMail");


if(criteria.getUsername()!=null && !criteria.getUsername().isEmpty()) {
      predicates.add(cb.equal(username, criteria.getUsername()));
    }

    if(criteria.getAgentCode()!=null && !criteria.getAgentCode().isEmpty()) {
      predicates.add(cb.equal(agentCode, criteria.getAgentCode()));
    }

    if(criteria.getFirstName()!=null && !criteria.getFirstName().isEmpty()) {
      predicates.add(cb.like(firstname, "%"+criteria.getFirstName()+"%"));
    }

    if(criteria.getLastName()!=null && !criteria.getLastName().isEmpty()) {
      predicates.add(cb.equal(lastname, criteria.getLastName()));
    }

    if(criteria.getEMail()!=null && !criteria.getEMail().isEmpty()) {
      predicates.add(cb.equal(email, criteria.getEMail()));
    }

    if(criteria.getStatus()!=null) {
      predicates.add(cb.equal(status, criteria.getStatus()));
    }

    return cb.and(predicates.toArray(new Predicate[predicates.size()]));
  }
Run Code Online (Sandbox Code Playgroud)

从服务层调用的我的存储库接口如下所示。

public interface UserRepo …
Run Code Online (Sandbox Code Playgroud)

java sql string spring jpa

5
推荐指数
2
解决办法
3523
查看次数

标签 统计

java ×1

jpa ×1

spring ×1

sql ×1

string ×1