实体如下:
IntegralGoods 积分商品
IntegralGoodsImg 积分商品图片
ShelfLog 积分商品自动上架记录
IntegralGoods :IntegralGoodsImg:ShelfLog = 1:n:1
1:1的多表联查或者m:n的多表联查 很简单,
现在出现1:n的情况,一种积分商品可能有多张图片
所以在最后的返回结果里想用LIst<IntegralGoodsImg>作为IntegralGoods 的一个字段作为参数进行接收
那mybatis怎么实现查询呢?
=========================================================
1.IntegralGoods 实体【只关注字段即可】,尤其是
@Transient
private List<IntegralGoodsImg> imgList;//图片们
这个字段就是用来接收多个图片实体的
package com.pisen.cloud.luna.ms.jifen.base.domain; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.persistence.*; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import org.apache.commons.lang3.StringUtils; import org.hibernate.annotations.Type; import org.springframework.data.jpa.domain.Specification; import com.pisen.cloud.luna.ms.jifen.base.common.BaseDomain; /** * 积分商品表 */ @Entity @Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "uid" })}) public class IntegralGoods extends BaseDomain { public static final int DELETE_FLAG_DELETE = 1;//删除 public static final int DELETE_FLAG_DISDELETE = 0;//未删除 public static final int SHELF_ON = 1;//上架 public static final int SHELF_OFF = 0;//下架 public static final int SHOW_HOME_FLAG_YES = 1;//首页展示 public static final int SHOW_HOME_FLAG_NO = 0;//不在首页展示 @Type(type = "text") private String description; //商品描述 private String cdKey;//虚拟物品激活码 ---弃用 @Column(nullable = false) private String name; // 名称 @Column(nullable = false) private Float marketValue; // 原价 @Column(nullable = false) private Integer integral; // 兑换积分 private Integer type; // (1:实物 2:虚拟) @Column(nullable = false) private Integer stock; // 库存数量(-1时无限量 : 正常扣除) @Column(nullable = false) private Integer saleNum; // 销量 已兑换数量 private Integer version; /** * ========新增字段=================== */ @Column(nullable = false) private Integer limitNum;//限兑数量 private String goodsCode;//商品编号 @Column(nullable = false) private String specification;//商品规格 实物商品必填 private Integer deleteFlag;//删除标识 @Column(nullable = false) private Integer shelfFlag;//上架标识 @Column(nullable = false) private Integer homeShowFlag;//是否首页展示 private String remark; //备注 @Transient private String order;//排序字段 @Transient private String orderType;//排序方法 @Transient private String headImg;//首页图片 @Transient private List<String> imgUrlList;//接收前台URL集合使用 @Transient private Date shelfDate;//上架时间 接收前台字段 @Transient private Date obtainedDate;//下架时间 接收前台字段 private String shelfRemark;//上架信息 备注 @Transient private List<IntegralGoodsImg> imgList;//图片们 public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public String getShelfRemark() { return shelfRemark; } public void setShelfRemark(String shelfRemark) { this.shelfRemark = shelfRemark; } public Integer getHomeShowFlag() { return homeShowFlag; } public void setHomeShowFlag(Integer homeShowFlag) { this.homeShowFlag = homeShowFlag; } public Integer getShelfFlag() { return shelfFlag; } public void setShelfFlag(Integer shelfFlag) { this.shelfFlag = shelfFlag; } public Integer getLimitNum() { return limitNum; } public void setLimitNum(Integer limitNum) { this.limitNum = limitNum; } public String getGoodsCode() { return goodsCode; } public void setGoodsCode(String goodsCode) { this.goodsCode = goodsCode; } public String getSpecification() { return specification; } public void setSpecification(String specification) { this.specification = specification; } public Integer getDeleteFlag() { return deleteFlag; } public void setDeleteFlag(Integer deleteFlag) { this.deleteFlag = deleteFlag; } public List<IntegralGoodsImg> getImgList() { return imgList; } public void setImgList(List<IntegralGoodsImg> imgList) { this.imgList = imgList; } public Integer getVersion() { return version; } public void setVersion(Integer version) { this.version = version; } public String getOrder() { return order; } public void setOrder(String order) { this.order = order; } public String getOrderType() { return orderType; } public void setOrderType(String orderType) { this.orderType = orderType; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getIntegral() { return integral; } public void setIntegral(Integer integral) { this.integral = integral; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getCdKey() { return cdKey; } public void setCdKey(String cdKey) { this.cdKey = cdKey; } public Integer getType() { return type; } public void setType(Integer type) { this.type = type; } public Integer getStock() { return stock; } public void setStock(Integer stock) { this.stock = stock; } public Float getMarketValue() { return marketValue; } public void setMarketValue(Float marketValue) { this.marketValue = marketValue; } public String getHeadImg() { if(imgList != null){ for (IntegralGoodsImg integralGoodsImg : imgList) { if(integralGoodsImg.getType() == 1){ headImg = integralGoodsImg.getSrc(); break; } } } return headImg; } public void setHeadImg(String headImg) { this.headImg = headImg; } public Integer getSaleNum() { return saleNum; } public void setSaleNum(Integer saleNum) { this.saleNum = saleNum; } public List<String> getImgUrlList() { return imgUrlList; } public void setImgUrlList(List<String> imgUrlList) { this.imgUrlList = imgUrlList; } public Date getShelfDate() { return shelfDate; } public void setShelfDate(Date shelfDate) { this.shelfDate = shelfDate; } public Date getObtainedDate() { return obtainedDate; } public void setObtainedDate(Date obtainedDate) { this.obtainedDate = obtainedDate; } public static Specification<IntegralGoods> where(final IntegralGoods entity) { return new Specification<IntegralGoods>() { @Override public Predicate toPredicate(Root<IntegralGoods> root, CriteriaQuery<?> query, CriteriaBuilder cb) { List<Predicate> predicates = new ArrayList<Predicate>(); //商品名称 String name = entity.getName(); if (StringUtils.isNotBlank(name)) { predicates.add(cb.like(root.<String>get("name"), "%" + name + "%")); } // ===========等于==================== // uid String uid = entity.getUid(); if (StringUtils.isNotBlank(uid)) { predicates.add(cb.equal(root.<String>get("uid"), uid)); } // tid String tid = entity.getTid(); if (StringUtils.isNotBlank(tid)) { predicates.add(cb.equal(root.<String>get("tid"), tid)); } // 积分 Integer integral = entity.getIntegral(); if (integral != null) { predicates.add(cb.equal(root.<String>get("integral"), integral)); } // 类型 Integer type = entity.getType(); if (type != null) { predicates.add(cb.equal(root.<String>get("type"), type)); } //库存 Integer stock = entity.getStock(); if (stock != null) { predicates.add(cb.equal(root.<String>get("stock"), stock)); } //激活码 String cdKey = entity.getCdKey(); if (StringUtils.isNotBlank(cdKey)){ predicates.add(cb.equal(root.get("cdKey"),cdKey)); } //商品编号 String goodsCode = entity.getGoodsCode(); if (StringUtils.isNotBlank(goodsCode)){ predicates.add(cb.equal(root.get("goodsCode"),goodsCode)); } //上架标识 Integer shelfFlag = entity.getShelfFlag(); if (shelfFlag != null){ predicates.add(cb.equal(root.get("shelfFlag"),shelfFlag)); } return query.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction(); } }; } }