首页 > Spring Date jpa 多个like匹配查询基础问题?

Spring Date jpa 多个like匹配查询基础问题?

本人想要实现的效果如下面sql 语句所示:

select * from user u where u.userid like '% 参数1 %' and u.username like '%参数2%'
 

通过百度已经实现 动态查询代码如下:

    public Page<User> getDataForSearch(PageRequest pageRequest, final JSONObject jSONObjSearch) throws SaggException {
        Page<User> page = null;

        try {
            page = userRepo.findAll(new Specification<User>() {
                @Override
                public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
                    List<Predicate> predicates = new ArrayList<Predicate>();
                    Predicate predicate = null;
                    Expression<String> namePath = null;

                    if (null != jSONObjSearch) {
                        if (StrKit.notBlank(jSONObjSearch.getString("userid"))) {
                            namePath = root.get("userid");
                            predicate = builder.like(namePath, "%" + jSONObjSearch.getString("userid") + "%");
                            predicates.add(predicate);
                        }
                        if (StrKit.notBlank(jSONObjSearch.getString("userName"))) {
                            namePath = root.get("userName");
                            predicate = builder.like(namePath, "%" + jSONObjSearch.getString("userName") + "%");
                            predicates.add(predicate);
                        }
                    }
                    query.where(predicates.toArray(new Predicate[predicates.size()]));
                    return null;
                }
            }, pageRequest);
        } catch (Exception e) {
            // 交易人管理模块异常状态码statusCode用2000开始,2001:数据查询错误
            throw new SaggException(StatusCodeUtil.personSearchErr);
        }

        return page;
    }

DAO 层代码如下:

public interface UserRepository extends CrudRepository<User, Integer> {
    // List<User> findAll(Pageable pageable);
    Page<User> findAll(Pageable pageable);// 分页需返回page对象

    Page<User> findAll(Specification<User> spe, Pageable pageRequest);

    Page<User> findByUseridOrUserNameLike(Pageable pageable, String userid, String userName);

问题: 上面这种写法,好像不能达到我期望的效果,上面这个代码哪里错了?怎么改进?请大神赐教,感激不尽……

【热门文章】
【热门文章】