一、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;
}
}