#spring data jpa查询自定义字段的方式
首先在所要查询的实体类对应的repository中自定义方法,当然返回值要自定义一个实体类,这个实体类中只包含所需要查询的字段名。
例如,我需要下面的几个字段,然后新创建包含这些字段的实体类
@Data
public class FeeSummaryDTO {
@ApiModelProperty(value = "")
protected Integer userId;
@ApiModelProperty(value = "")
protected Integer coinId;
@ApiModelProperty(value = "")
protected Integer currencyId;
@ApiModelProperty(value = "")
protected BigDecimal feeAmount;
public FeeSummaryDTO(Integer userId, Integer coinId, Integer currencyId, BigDecimal feeAmount) {
this.userId = userId;
this.coinId = coinId;
this.currencyId = currencyId;
this.feeAmount = feeAmount;
}
public FeeSummaryDTO() {
}
然后在要查询的表对应的repository中自定义方法
default List getFeeSummaryDTO(LocalDateTime from, LocalDateTime to){
EntityManager entityManager = ApplicationContextHolder.applicationContext.getBean(EntityManager.class); //获取实体管理器
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<FeeSummaryDTO> query = criteriaBuilder.createQuery(FeeSummaryDTO.class); //创建新的查询
Root<BsVtsDealEntity> root = query.from(BsVtsDealEntity.class); //查询的内容来自的类
query.where(
criteriaBuilder.greaterThan(root.get("createTime"), from),
criteriaBuilder.lessThanOrEqualTo(root.get("createTime"), to),
criteriaBuilder.equal(root.get("status"), OrderService.STATUS_ALL_DEAL)
).groupBy(root.get("userId"), root.get("coinId"), root.get("currencyId"))
.multiselect(root.get("userId"), root.get("coinId"), root.get("currencyId"),
criteriaBuilder.sum(root.get("poundage"))); //select时字段顺序要对上
List<FeeSummaryDTO> resultList = entityManager.createQuery(query).getResultList();
return resultList;
}