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

发布于 2022-09-03 15:29:50 字数 2370 浏览 13 评论 0

本人想要实现的效果如下面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);

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白色秋天 2022-09-10 15:29:50

findByUseridLikeOrUserNameLike

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文