使用jpa聚合函数遇到的问题

spring data jpa 可以通过在接口中按照规定语法创建一个方法进行增删改查,可以快速开发。

但是一些特殊情况,如按条件查询统计,这个时候通过规定语法还是直接@Query写原生sql都不能解决,因为这个统计的条件不好添加。

百度之后,可以使用EntityManager来解决。

EntityManager 对象在一组实体类与底层数据源之间进行 O/R 映射的管理。它可以用来管理和更新 Entity Bean, 根椐主键查找 Entity Bean, 还可以通过JPQL语句增删改查实体。

首先通过@PersistenceContext注入EntityManager

@PersistenceContext
private EntityManager em;

使用如下:

BigDecimal totals = new BigDecimal(0);
StringBuffer sql= new StringBuffer("SELECT SUM(total) FROM Order WHERE state = 1");
if (StringUtils.isNotBlank(order.getOrderNo())) {
    sql.append(" AND orderNo = ").append(order.getOrderNo());
}
if (StringUtils.isNotBlank(orderTime)) {
    sql.append(" AND orderPayTime LIKE '").append(orderTime).append("%'");
}
if (order.getCustomer() != null) {
    //where条件后面是对象信息,不能直接传入对象拼成sql,会报错.
    sql.append(" AND customer = :customer");
}

Query query = em.createQuery(sql.toString());
if (order.getCustomer() != null) {
    //通过setParameter,给参数赋值.
    query.setParameter("customer", order.getCustomer());
}
Object result = query.getSingleResult();
if (result != null) {
    totals = new BigDecimal(result.toString());
}
return totals;

你可能感兴趣的:(使用jpa聚合函数遇到的问题)