为此,您需要为任何类型的条件编写自定义查询。
通常 ORM 工具做得很好:
对于 Java(Spring 和 JPA),您可以使用标准 api 和一些帮助程序,其中之一是 Spring Data 的规范构建器模式:
Specifications fullSpec = null;
if (param1 != null) {
fullSpec = Specifications.where(<... criteria condition for param1 ...>);
}
if (param2 != null) {
if (fullSpec != null) {
specs = fullSpec.and(<define condition using criteria api>);
} else {
fullSpec = Specifications.where(<same condition for param2>);
}
}
当您在 NodeJS 上时(从标签来看似乎是真的),您可以使用Sequelize。直接来自它的教程:
var filterObject = {
minValue: <its value received from request>,
maxValue: <its value received from request>,
minRating: <its value received from request>,
maxRating: <its value received from request>
};
// filterout null valued properties out of filter
filterObject = _.compactObject(filterObject);
Items.findAll({
where: filterObject
});
这就是您以安全的方式实现结果所需的全部内容。
此示例使用下划线混合从对象中过滤掉空值,如此响应中所示
您也可以随时按照以下方式编写查询:
var query = 'select * from items where maxPrice=:maxPrice'
if (minPrice) {
query = query + ' and minPrice=:minPrice'
}
//...
// fill-in all other conditions.
//...
// and then simply query with named parameters.