Spring Data Jpa使用——Specification条件查询使用方法(等于;大于;小于;in;not in;between)
背景
- 在使用Spring Data Jpa中的Specification进行多条件查询时的各种条件处理
实例
- 以下实例中的查询条件包括(等于;大于;小于;in;not in;between)
Specification<MinerExceptionTable> specification = new Specification<MinerExceptionTable>() { @SneakyThrows @Override public Predicate toPredicate(Root<MinerExceptionTable> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) { List<Predicate> predicateList = new ArrayList<>(); /** * 相等=== * * @参数 X * @参数类型 */ if (StrUtil.isNotEmpty()) { predicateList.add(criteriaBuilder.equal(root.get("farmCode"), X)); } /** * not in * * @参数 XXXX * @参数类型 List */ if (CollUtil.isNotEmpty(XXXX)) { Predicate validDnaPredicate = root.get("dna").in(XXXX).not(); predicateList.add(validDnaPredicate); } /** * in * * @参数 XXXX * @参数类型 List */ if (CollUtil.isNotEmpty(XXXX)) { Predicate invalidDna = root.get("dna").in(XXXX); predicateList.add(invalidDna); } /** * 大于等于>= * * @参数 XX * @参数类型 数值 */ if (CollUtil.isNotEmpty(XX)) { predicateList.add(criteriaBuilder.greaterThanOrEqualTo(root.get("level"), XX)); } /** * 小于等于<= * * @参数 XX * @参数类型 数值 */ if (CollUtil.isNotEmpty(XX)) { predicateList.add(criteriaBuilder.lessThanOrEqualTo(root.get("level"), XX)); } /** * betweeen * * @参数 XX_1 ; XX_2 * @参数类型 数值 */ if (CollUtil.isNotEmpty(XXX_1) && CollUtil.isNotEmpty(XXX_2)) { predicateList.add(criteriaBuilder.between(root.get("level"), XX_1, XX_2)); } /** * 大于等于>= * * @参数 XXX * @参数类型 Date */ if (CollUtil.isNotEmpty(XXX)) { predicateList.add(criteriaBuilder.greaterThanOrEqualTo(root.get("level").as(Date.class), XX)); } /** * 小于等于<= * * @参数 XXX * @参数类型 Date */ if (CollUtil.isNotEmpty(XXX)) { predicateList.add(criteriaBuilder.lessThanOrEqualTo(root.get("level").as(Date.class), XX)); } /** * betweeen * * @参数 XXX_1 ; XXX_2 * @参数类型 Date */ if (CollUtil.isNotEmpty(XXX_1) && CollUtil.isNotEmpty(XXX_2)) { predicateList.add(criteriaBuilder.between(root.get("level").as(Date.class), XX_1, XX_2)); } Predicate[] pre = new Predicate[predicateList.size()]; pre = predicateList.toArray(pre); return criteriaQuery.where(pre).getRestriction(); } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」