在项目中,一般都会遇到参数不确定传的情况,比如搜索,关键字可能是空,在mybtis中可以用<if>标签去判断,Jpa判断如下。
第一种:
public interface UserRepository extends JpaRepository<User,Long> {
@Query(value = "select * from user where if(?1!='',name=?1,1=1) and if(?2!='',age=?2,1=1)" ,nativeQuery = true)
List<XXX> find(String name,String age);
}
第二种:
public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
class SpecBuilder {
public static Specification<User> buildBackendList(String name, String age) {
return (Specification<User>) (root, query, cb) -> {
List<Predicate> list = new ArrayList<>();
if (StrUtil.isNotBlank(name)) {
list.add(cb.equal(root.get("name"), name));
}
if (StrUtil.isNotBlank(age)) {
//如果是模糊查询就是
//list.add(
// cb.like(root.get("***").as(String.class), "%" + *** + "%")
// );
list.add(cb.equal(root.get("age"), age));
}
Predicate[] p = new Predicate[list.size()];
return cb.and(list.toArray(p));
};
}
}
}