数据库用的是postgres,该数据库可以将两个字符串转换成数组进行比较
示例,结果为ture
string_to_array('a,b', ',') && string_to_array('b,c', ',')
return baseIndexRepository.findAll((Specification<BaseIndex>) (root, criteriaQuery, criteriaBuilder) -> {
List<Predicate> list = new ArrayList<>();
if (baseIndex != null) {
if (StringUtils.hasText(baseIndex.getPlatType())) {
Expression<String> expression = criteriaBuilder.literal(",");
Expression<String> databaseExpress = criteriaBuilder.function(DatabaseConstant.Function.STRING_TO_ARRAY, String.class, root.get("platType"), expression);
Expression<String> stringListExpress = criteriaBuilder.function(DatabaseConstant.Function.STRING_TO_ARRAY, String.class, criteriaBuilder.literal(baseIndex.getPlatType()), expression);
list.add(criteriaBuilder.equal(stringListExpress, databaseExpress));
}
}
// and 拼接起来
Predicate and = criteriaBuilder.and(list.toArray(new Predicate[list.size()]));
// where 查询
criteriaQuery.where(and);
// 如果pageable 里面没有指定排序字段,就会采用下面的排序
criteriaQuery.orderBy(criteriaBuilder.desc(root.get("createTime")));
return criteriaQuery.getRestriction();
}, pageInfo);
现在代码执行的sql(只写了where的部分)
and string_to_array(plat_type, ',') = string_to_array('mobile', ',')
现在需要用Specification将比较的符号改为特殊符号,用&&进行比较两边的值,而不是用=符号,如下所示(只写了where的部分)
and string_to_array(plat_type, ',') && string_to_array('mobile', ',')
是要比较&&内容,还是用&&替换and?