转自 : http://blog.youkuaiyun.com/chaijunkun/article/details/8442406
适应场景:
1 用SpringJPA框架
2 需要选取多个实体表的字段, 组装成一个类时(例如下面例子中的GoodsSales类是由Order类的数据组成的)
1. DTO 类 GoodsSales
package com.exodus.weistore.goods.data;
import java.io.Serializable;
public class GoodsSales implements Serializable{
private static final long serialVersionUID = 4497500574990765498L;
//产品id
private String goodsId;
//产品总销量
private Long amount;
public GoodsSales()
{ };
public GoodsSales(String goodsId, long amount) {
this.goodsId = goodsId;
this.amount = amount;
}
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public Long getAmount() {
return amount;
}
public void setAmount(Long amount) {
this.amount = amount;
}
}
2. repository 实例代码
<span style="font-size:14px;">package com.exodus.weistore.goods.repository;
import java.util.ArrayList;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.exodus.weistore.goods.data.GoodsSales;
import com.exodus.weistore.goods.model.Goods;
@Repository
public interface GoodsRepository
extends JpaRepository<Goods, String>, JpaSpecificationExecutor<Goods>
{
@Query("SELECT NEW com.exodus.weistore.goods.data.GoodsSales(o.goodsId, SUM(o.amount)) "
+ "FROM Order o "
+ "WHERE o.state = Order$OrderState.completion AND o.sellerId = ?1 AND o.goodsId IN (?2) "
+ "GROUP BY o.goodsId")
</span><h1><span style="font-size:14px;"> public ArrayList<GoodsSales> getGoodsSales(Integer audienceId, String[] goodsIds);</span></h1><span style="font-size:14px;">}</span>