【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()的参数必须是集合。
题。

目录
相关文章
使用JavaStream将List转为Map
使用JavaStream将List转为Map
|
8月前
|
存储 文件存储 Android开发
仿第八区APP分发下载打包封装系统源码
该系统为仿第八区APP分发下载打包封装系统源码,支持安卓、iOS及EXE程序分发,自动判断并稳定安装。智能提取应用信息,自动生成PLIST文件和图标,提供合理的点数扣除机制。支持企业签名在线提交、专属下载页面生成、云端存储(阿里云、七牛云),并优化签名流程,支持中文包及合并分发,确保高效稳定的下载体验。 [点击查看源码](https://download.csdn.net/download/huayula/90463452)
486 22
|
机器学习/深度学习 人工智能 算法
【算法】最长公共子序列(C/C++)
【算法】最长公共子序列(C/C++)
|
存储 开发框架 JavaScript
在Vue3项目中使用pinia代替Vuex进行数据存储
在Vue3项目中使用pinia代替Vuex进行数据存储
|
Java Spring
解决SpringBoot中@RequestBody不能和Multipart同时传递的问题
请根据你的实际需求选择上述方法之一来解决Spring Boot中 `@RequestBody`不能和 `Multipart`同时使用的问题。
1889 1
apache.commons.lang3常用工具类
apache.commons.lang3常用工具类
306 2
|
SQL Java 数据库连接
spring声明式事务 @Transactional 不回滚的多种情况以及解决方案
spring声明式事务 @Transactional 不回滚的多种情况以及解决方案
492 0
|
Python
用Python优雅地写出数学表达式的LaTeX代码
用Python优雅地写出数学表达式的LaTeX代码
600 1
用Python优雅地写出数学表达式的LaTeX代码
idea中如何创建SpringBoot项目
idea中如何创建SpringBoot项目
|
Java
JDK8中Stream的Filter方法
JDK8中Stream的Filter方法
601 0