JPA 多表查询 动态生成SQL语句

话不多说,直接上代码:
public Specification<PeviewDO> getSpecification(PeviewBO peviewBO) {
    Specification<PeviewDO> specification = new Specification<PeviewDO>() {

        public Predicate toPredicate(Root<PeviewDO> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
            //page : 0 开始, limit : 默认为 10
            List<Predicate> predicates = new ArrayList<>();
            //权限
            if (StringUtils.isNotBlank(peviewBO.getRoleLevelCode())) {
                String[] submit_statuses = peviewBO.getRoleLevelCode().split(",");
                List<Predicate> roleLevelCodes = new ArrayList<>();
                for (int i = 0; i < submit_statuses.length; i++) {
                    roleLevelCodes.add(criteriaBuilder.like(root.get("roleLevelCode").as(String.class), "" + submit_statuses[i] + "%"));
                }
                predicates.add(criteriaBuilder.and(criteriaBuilder.or(roleLevelCodes.toArray(new Predicate[predicates.size()]))));
            }

            Join<SalesTargetMasterDO, PeviewDO> join = root.join("salesTargetMaster", JoinType.LEFT);
            predicates.add(criteriaBuilder.equal(join.get("isDel").as(Integer.class), "0"));
            //设置条件
            if (StringUtils.isNotBlank(peviewBO.getEmployeeNo())) {
                predicates.add(criteriaBuilder.like(join.get("employeeNo"), peviewBO.getEmployeeNo() + "%"));
            }
            //设置条件
            if (StringUtils.isNotBlank(peviewBO.getRegion())) {
                predicates.add(criteriaBuilder.equal(join.get("region"), peviewBO.getRegion()));
            }
            //设置条件
            if (StringUtils.isNotBlank(peviewBO.getSubRegion())) {
                predicates.add(criteriaBuilder.equal(join.get("subRegion"), peviewBO.getSubRegion()));
            }
            //设置条件
            if (StringUtils.isNotBlank(peviewBO.getDistrict())) {
                predicates.add(criteriaBuilder.like(join.get("district"), peviewBO.getDistrict() + "%"));
            }
            //设置条件
            if (StringUtils.isNotBlank(peviewBO.getYear())) {
                LocalDate firstDayOfMonth = LocalDate.parse(peviewBO.getYear() + "-01", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                String lastDayOfMonth = getLastDayOfMonth(peviewBO.getYear());
                predicates.add(criteriaBuilder.greaterThanOrEqualTo(join.get("startDate"), firstDayOfMonth));
                predicates.add(criteriaBuilder.lessThanOrEqualTo(join.get("startDate"), LocalDate.parse(peviewBO.getYear() + "-" + lastDayOfMonth, DateTimeFormatter.ofPattern("yyyy-MM-dd"))));
            }
            //设置条件
            if (StringUtils.isNotBlank(peviewBO.getRoleType())) {
                predicates.add(criteriaBuilder.like(join.get("roleType"), "%" + peviewBO.getRoleType() + "%"));
            }
            //设置条件
            if (StringUtils.isNotBlank(peviewBO.getPerformanceType())) {
                predicates.add(criteriaBuilder.equal(root.get("performanceType"), peviewBO.getPerformanceType()));
            }

            return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
        }
    };
    return specification;
}
//获取判断条件
Specification<PeviewDO> specification = salesTargetMasterService.getSpecification(peviewBO);

//studentId必须是实体类属性与数据库对应,否则报ropertyReferenceException异常
List<PeviewDO> peivewDOList = this.masterToDatilRespository.findAll(specification,sort);

下面说一下用的

spring-data-jpa-2.1.15.RELEASE.jar

在子表中添加
@OneToOne(optional = false)
@JoinColumn(name = "pmkb_id", referencedColumnName = "id", insertable = false, updatable = false
        , foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))
private SalesTargetMasterDO salesTargetMaster;
@OneToOne(optional = false)
@JoinColumn(name = "kbdatail_id", referencedColumnName = "kbdatail_id", insertable = false, updatable = false
        , foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))
private YejiSalesDetailDO yejiSalesDetailDO;

参考资料如下

https://www.cnblogs.com/arrrrrya/p/7865090.html

JAVA使用easyexcel操作Excel

https://www.yuque.com/easyexcel/doc/fill#5dXFh

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值