【JPA CriteriaBuilder 如何使用关键字“in“】

简介: 修改公司的老项目,突然要用到这个知识点,但是自己查到的这方面的文章太少了,就自己总结了一份,亲测正确!

ps:修改公司的老项目,突然要用到这个知识点,但是自己查到的这方面的文章太少了,就自己总结了一份,亲测正确!

@Override

public Page<UserInfoDTO> UserListByConditions(QueryInfoDTO queryInfoDTO, Integer page, Integer limit) {
    Pageable pageable = PageRequest.of(page - 1, limit, Sort.Direction.DESC,"showOrder");
    Specification<UserInfo> spec = new Specification<UserInfo>() {
        @Override
        public Predicate toPredicate(Root<UserInfo> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
            List<Predicate> list = new ArrayList<Predicate>();
            if (StringUtils.isNotBlank(queryInfoDTO.getUserId())){ 
               //root.get("channelId")表示获取channelId这个字段名称
               list.add(criteriaBuilder.equal(root.get("UserId").as(String.class), queryInfoDTO.getUserId()));
               }
             if (StringUtils.isNotBlank(queryInfoDTO.getUserName())){ 
                  //like表示执行like查询,%...%表示值
                  list.add(criteriaBuilder.like(root.get("UserlName").as(String.class), "%" + queryInfoDTO.getContent() + "%"));
       
                }

            List<String> userIds = new ArrayList<>();
            userIds.add(",1,");
            userIds.add(",2,");
            userIds.add(",3,");
            userIds.add(",4,");
            list.add(criteriaBuilder.in(root.get("userId")).value(userIds ));
            Predicate[] p = new Predicate[list.size()];
            //将多个查询条件联合起来之后,返回Predicate对象
            return criteriaBuilder.and(list.toArray(p));
        }
    };
    Page<UserInfo> entitys = userInfoRepository.findAll(spec, pageable);
    Page<UserInfoDTO> dtos = new PageImpl<>(convertUserInfoEntityToDTOs(entitys.getContent()), pageable, entitys.getTotalElements() );
    return dtos;
}


重点关注

list.add(criteriaBuilder.in(root.get("userId")).value(userIds ));
如果用到in,value()的参数必须是集合。
题。

目录
相关文章
|
6月前
|
C#
30.C# 关键字 this初步学习
30.C# 关键字 this初步学习
38 1
|
1月前
|
开发框架 Cloud Native .NET
10 个 C# 关键字和功能
10 个 C# 关键字和功能
52 8
|
5月前
|
Dart 开发者
Dart中的类型判断(is 关键字)
Dart中的类型判断(is 关键字)
123 0
|
6月前
|
存储 安全 编译器
【C/C++】C/C++编程——C++ 关键字和数据类型简介
【C/C++】C/C++编程——C++ 关键字和数据类型简介
62 2
|
11月前
|
SQL Dart 小程序
C#using关键字的使用方法
这里记录下C#中using关键字的使用方法。 Using的使用大致分别以下三种:
63 0
🎖️typeScrpt中如何使用条件类型和泛型?
我将通过一个可能对日常使用非常有帮助的代码示例更深入地介绍泛型。
72 1
|
存储 编译器 Linux
C++必知必会之基础知识-常用关键字(1)
大家好,我是Linux兵工厂,在工作经常发现小伙伴们遇到一些C++的问题都是对基础知识不熟悉或理解混乱所导致的。正所谓万丈高楼平地起,作为一名合格的程序员来说,没有良好的基本功很难达到一定的高度。而工作中大部分编程问题都是基本功不扎实所导致,所以决定花些时间来整理C++相关的基本知识和基本概念供大家参考理解。 关注公众号:Linux兵工厂,领取海量Linux免费学习资料,且会不定时输出更多干货知识
|
安全
synchronized关键字 - - 三种使用方法
synchronized关键字 的 三种使用方法: 第一种 synchronized(对象) { 临界区 } 第二种 加在 非静态方法 上 第三种 加在 静态方法 上
67 0
|
SQL
基础关键字
基础关键字
86 0
14.从入门到精通:Python条件控制 if 语句 if 嵌套
14.从入门到精通:Python条件控制 if 语句 if 嵌套