我认为没有特定的方法可以做到这一点,但如果您将参数传递为Map<String, Object>
:
public List<Customer> getCustomers(Map<String, Object> parameters)
if ( parameters == null ) {
return Customer.listAll();
}
Map<String, Object> nonNullParams = parameters.entrySet().stream()
.filter( entry -> entry.getValue() != null )
.collect( Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue ) );
if ( nonNullParams.isEmtpty() ) {
return Customer.listAll();
}
String query = nonNullParams.entrySet().stream()
.map( entry -> entry.getKey() + "=:" + entry.getKey() )
.collect( Collectors.joining(" and ") );
return Customer.find(query, nonNullParams);
}
或者
public List<Customer> getCustomers (String firstname, String lastname, String status, String email) {
Map<String, Object> parameters = new HashMap<>();
addIfNotNull(parameters, "firstName", firstName );
addIfNotNull(parameters, "lastName", lastName );
addIfNotNull(parameters, "status", status );
addIfNotNull(parameters, "email", email );
if ( parameters.isEmtpty() ) {
return Customer.listAll();
}
String query = parameters.entrySet().stream()
.map( entry -> entry.getKey() + "=:" + entry.getKey() )
.collect( Collectors.joining(" and ") );
return Customer.find(query, parameters)
}
private static void addIfNotNull(Map<String, Object> map, String key, String value) {
if (value != null) {
map.put(key, value);
}
}