JPA动态参数查询

JPA动态参数查询

使用JPA动态拼接查询条件 实现类查询方法

//实现类查询方法
  @Override
  public Page<VehiclePassEntity> selectList(QueryParams queryParams) {
    List<VehiclePassEntity> content = null;
//    拼接分页参数和排序字段
//    或是 PageRequest.of
    PageRequest pageRequest = new PageRequest(queryParams.getPageIndex() - 1,
        queryParams.getPageSize(), Direction.DESC, "passTime");
//    拼接查询条件
    Map map = creatMap(queryParams);
    Specification<VehiclePassEntity> specification = createSpecification(map,queryParams);
//    执行查询
    Page<VehiclePassEntity> all = vehiclePassRepository.findAll(specification, pageRequest);
    return all;
  }
     
参数类型
 
@Data
@ApiModel
public class QueryParams {

  @ApiModelProperty(name = "index", value = "页码")
  private Integer pageIndex = 1;
  @ApiModelProperty(name = "size", value = "页面大小")
  private Integer pageSize = 50;
  @ApiModelProperty(name = "plateNo", value = "车牌号,模糊匹配")
  private String plateNo;
  @ApiModelProperty(name = "weightMin", value = "实载重量最小值")
  private String weightMin;
  @ApiModelProperty(name = "weightMax", value = "实载重量最大值")
  private String weightMax;
  @ApiModelProperty(name = "deviceName", value = "设备名称")
  private String deviceName;
  @ApiModelProperty(name = "isOverWeight", value = "是否超重")
  private Boolean isOverWeight;
  @ApiModelProperty(name = "startTime", value = "开始时间")
  private String startTime;
  @ApiModelProperty(name = "endTime", value = "结束时间")
  private String endTime;
}

参数处理方法
 public static Map creatMap(Object object) {
    Map<String, String> map = null;
    String objStr = JSON.toJSONString(object);
    if (StringUtils.isAllBlank(objStr)) {
      logger.error("拼接的查询条件为空");
      return null;
    }
    map = JSON.parseObject(objStr, Map.class);
    return map;
  }
JPA动态查询,拼接Specification
 private Specification<VehiclePassEntity> createSpecification(Map<String, String> searchMap,
      QueryParams queryParams) {
    return (root, criteriaQuery, criteriaBuilder) -> {
      List<Predicate> predicateList = new ArrayList<>();
      // 设备编码
      if (StringUtils.isNotBlank((String) searchMap.get("deviceIndexCode"))) {
        predicateList.add(criteriaBuilder
            .equal(root.get("deviceIndexCode").as(String.class),
                searchMap.get("deviceIndexCode")));
      }
      // plateNo车牌号
      if (StringUtils.isNotBlank((String) searchMap.get("plateNo"))) {
        predicateList.add(criteriaBuilder
            .like(root.get("plateNo").as(String.class),
                "%" + searchMap.get("plateNo") + "%"));
      }
          // 重量
      if (StringUtils.isNotBlank((String) searchMap.get("weightMin"))) {
        predicateList.add(criteriaBuilder
            .ge(root.get("weight").as(Double.class),
                Double.parseDouble(searchMap.get("weightMin"))));
      }
      // 重量
      if (StringUtils.isNotBlank((String) searchMap.get("weightMax"))) {
        predicateList.add(criteriaBuilder
            .le(root.get("weight").as(Double.class),
                Double.parseDouble(searchMap.get("weightMax"))));
      }
           // 开始时间
      if (!JudgeEmpty.isEmpty(queryParams.getStartTime())) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date startDate = null;
        Date endDate = null;
        try {
          startDate = format.parse(queryParams.getStartTime());
          endDate = format.parse(queryParams.getEndTime());
        } catch (Exception e) {
          logger.error("时间格式化失败");
        }
        predicateList.add(criteriaBuilder.between(root.<Date>get("passTime"), startDate, endDate));
      }
           // 是否超重
      Object isOverWeight = searchMap.get("isOverWeight");
      if (!JudgeEmpty.isEmpty(isOverWeight)) {
        predicateList.add(criteriaBuilder
            .equal(root.get("isOverWeight").as(Boolean.class),
                searchMap.get("isOverWeight")));
      }

      return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
    };
  }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qdu_ghx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值