SpringBoot-Spring Data Jpa - 复杂业务查询 Specification

SpringBoot-Spring Data Jpa - 复杂业务查询 Specification

  • Specification 前言

maven依赖

 <!-- Specification封装工具类-->
        <!-- 使用起来更简单,不过是非官方出品,可能会出现版本不兼容的问题-->
        <!-- https://github.com/wenhao/jpa-spec -->
        <dependency>
            <groupId>com.github.wenhao</groupId>
            <artifactId>jpa-spec</artifactId>
            <version>3.2.4</version>
        </dependency>

应对Spring Data Jpa 复杂逻辑查询而生的条件对象

  • Specification 构建对象

    • Object泛型描述,针对业务逻辑构建的条件对象,通常与Repository层泛型一直
    • and 与 or 就是创建的逻辑 ‘与’、‘或’ 对象,表示构建的条件对象为逻辑 ‘与’、‘或’ 关系
Specification<Object> and = Specifications.and().build();
Specification<Object> or = Specifications.or().build();
  • Specification 编写逻辑语句

    • 一般代码结构分为三个部分
      • 断言,为 true 则促发当前逻辑
      • 实体对象中的属性名称,会根据实体对象直接映射表关系,建议反射写法更好,代码容错性、解耦性更高
      • 传入的条件,例子中逻辑语句以 ‘between’ 为例子,必须满足参数 ‘111L’ 与 ‘assembly.getOsVersionId()’ 之间才匹配,  ‘between’ 一般用于时间查询,eq 、like 等查询这里均需要一个参数即可,多个条件以数组的形式入参
    • like 模糊查询需要更灵活,需要手动指定 ‘%’ 的位置,例子中以前后均模糊匹配为例子
Specification<Assembly> build = Specifications.<Assembly>and()
				.between(null != assembly.getOsVersionId(),
						"osVersionId", 
						111L,
						assembly.getOsVersionId())
				.build();

.findAll(build);

---------------------------------------------------------------------------------------

Specification<Assembly> build = Specifications.<Assembly>and()
				.like(StringUtils.isNotBlank(assembly.getAssemblyName()),
						"%assemblyName%",
						assembly.getAssemblyName())
				.build();

.findAll(build);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值