SpringBoot-SpringData-懒加载

一、SpringData-懒加载的作用和应用场景

预期:
     启用懒加载后,对Student表取数,不会自动带出Course集合
     当student1.getCourse()使用集合时,再执行Student取数
作用:
     当不需要使用Course集合引用时,不会执行多余的查询,提升效率

二、springdataJpa复杂查询

package bidding.model.specification;


import bidding.model.dto.BiddingSupplierOrderManagerModelDto;
import bidding.model.po.JcbdBdProvider;
import bidding.model.po.JcbdBidding;
import bidding.model.po.JcbdBiddingOrderItem;
import bidding.model.po.JcbdMallOrder;
import lombok.Data;
import org.springframework.data.jpa.domain.Specification;
import utils.Lang;
import utils.string.StringUtils;

import javax.persistence.criteria.*;
import java.util.ArrayList;
import java.util.List;
/**
* @date 2018/4/14
*/
@Data
public class BiddingSupplierOrderManagerSpecification<T> implements Specification<T>{

    private BiddingSupplierOrderManagerModelDto biddingSupplierOrderManagerModelDto;

    public BiddingSupplierOrderManagerSpecification() {
    }

    public BiddingSupplierOrderManagerSpecification(BiddingSupplierOrderManagerModelDto biddingSupplierOrderManagerModelDto) {
        this.biddingSupplierOrderManagerModelDto = biddingSupplierOrderManagerModelDto;
    }

    @Override
    public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
        List<Predicate> predicates = new ArrayList<>();
        predicates.add(cb.equal(root.get("isDelete"), false));
        predicates.add(cb.isNotNull(root.get("supplierOrderStatus")));
        if (!StringUtils.isEmpty(biddingSupplierOrderManagerModelDto.getProviderId()) && !biddingSupplierOrderManagerModelDto.getProviderId().isEmpty()) {
            predicates.add(cb.equal(root.get("providerId"), biddingSupplierOrderManagerModelDto.getProviderId()));
        }
        if (!StringUtils.isEmpty(biddingSupplierOrderManagerModelDto.getBiddingCode()) && !biddingSupplierOrderManagerModelDto.getBiddingCode().isEmpty()) {
            predicates.add(cb.equal(root.get("jcbdOrder").get("jcbdBidding").get("biddingCode"), biddingSupplierOrderManagerModelDto.getBiddingCode()));
        }
        if (!StringUtils.isEmpty(biddingSupplierOrderManagerModelDto.getGoodsCode()) && !biddingSupplierOrderManagerModelDto.getGoodsCode().isEmpty()) {
            Join<JcbdMallOrder, JcbdBiddingOrderItem> biddingJoin = root.join("jcbdBiddingOrderItems",JoinType.INNER);
            predicates.add(cb.equal(biddingJoin.get("sku"), biddingSupplierOrderManagerModelDto.getGoodsCode()));
        }
        if (!Lang.isEmpty(biddingSupplierOrderManagerModelDto.getStatus())) {
            predicates.add(cb.equal(root.get("supplierOrderStatus"), biddingSupplierOrderManagerModelDto.getStatus()));
        }
        if (biddingSupplierOrderManagerModelDto.getOrderStartTime() != null) {
            predicates.add(cb.greaterThanOrEqualTo(root.get("dateCreated"), biddingSupplierOrderManagerModelDto.getOrderStartTime()));
        }
        if (biddingSupplierOrderManagerModelDto.getOrderEndTime() != null) {
            predicates.add(cb.lessThanOrEqualTo(root.get("dateCreated"), biddingSupplierOrderManagerModelDto.getOrderEndTime()));
        }

        return query.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();
    }
}
package bidding.model.po;

import bidding.model.po.base.BaseDomain;
import com.alibaba.fastjson.annotation.JSONField;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * @version 0.9 竞价采购实物商城订单表 2018-3-7 14:31:21.
 */

@Entity
public class JcbdMallOrder extends BaseDomain implements Serializable {


    /**
     * 主键.
     */
    @Id
    @GenericGenerator(name = "PKUUID", strategy = "uuid2")
    @GeneratedValue(generator = "PKUUID")
    private String id;

    /**
     * 竞价id.
     */
    @ManyToOne
    @JoinColumn(name = "JCBD_ORDER_ID", foreignKey = @ForeignKey(name = "FK_BIDDING_MALL_ORDER"))
    private JcbdOrder jcbdOrder;
    /**
     * 竞价订单状态
     */
    private String status;
    /**
     * 供应商订单状态
     */
    private String supplierOrderStatus;
    /**
     * 订单地址
     */
    private String address;
    /**
     * 确认订单时间
     */
    @Column(name = "confirm_order_time")
    @JSONField(format="yyyy-MM-dd HH:mm:ss")     private Date confirmOrderTime;
    /**
     * 订单号.
     */
    private String orderNo;
    /**
     * 竞价供应商id
     */
    private String providerId;

    @OneToMany(mappedBy = "jcbdMallOrder",fetch = FetchType.LAZY,cascade = CascadeType.ALL)
    List<JcbdBiddingOrderItem> jcbdBiddingOrderItems;

    public List<JcbdBiddingOrderItem> getJcbdBiddingOrderItems() {
        return jcbdBiddingOrderItems;
    }

    public void setJcbdBiddingOrderItems(List<JcbdBiddingOrderItem> jcbdBiddingOrderItems) {
        this.jcbdBiddingOrderItems = jcbdBiddingOrderItems;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public JcbdOrder getJcbdOrder() {
        return jcbdOrder;
    }

    public void setJcbdOrder(JcbdOrder jcbdOrder) {
        this.jcbdOrder = jcbdOrder;
    }

    public String getOrderNo() {
        return orderNo;
    }

    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }

    public String getStatus() {
        return status;
    }

    public String getSupplierOrderStatus() {
        return supplierOrderStatus;
    }

    public void setSupplierOrderStatus(String supplierOrderStatus) {
        this.supplierOrderStatus = supplierOrderStatus;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Date getConfirmOrderTime() {
        return confirmOrderTime;
    }

    public void setConfirmOrderTime(Date confirmOrderTime) {
        this.confirmOrderTime = confirmOrderTime;
    }

    public String getProviderId() {
        return providerId;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void setProviderId(String providerId) {
        this.providerId = providerId;
    }
}
package bidding.model.po;

import bidding.model.po.base.BaseDomain;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

/**
 * 竞价订单商品项表
 *
 * @author torvalds on 2018/4/24 21:36.
 * @version 1.0
 */
@Entity
public class JcbdBiddingOrderItem extends BaseDomain {
    /**
     * 主键.
     */
    @Id
    @GenericGenerator(name = "PKUUID", strategy = "uuid2")
    @GeneratedValue(generator = "PKUUID")
    private String id;
    @ManyToOne
    private JcbdMallOrder jcbdMallOrder;
    private String sku;
    // 商品数量
    private Integer count;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public JcbdMallOrder getJcbdMallOrder() {
        return jcbdMallOrder;
    }

    public void setJcbdMallOrder(JcbdMallOrder jcbdMallOrder) {
        this.jcbdMallOrder = jcbdMallOrder;
    }

    public String getSku() {
        return sku;
    }

    public void setSku(String sku) {
        this.sku = sku;
    }

    public Integer getCount() {
        return count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }
}

猜你喜欢

转载自www.cnblogs.com/jcjssl/p/9391277.html