更新版本到 3.1.14, 距离上次 3.1.7 又花了半年年,期间有种种客观原因,可能因为工作上的事情太忙,有些偷懒了,除了之前聊到的逻辑分页,这次在上个版本基础加上两个聚合函数 selectSumByDynamicQuery, selectAvgByDynamicQuery
对某个列进行 sum 操作。
@Test public void testSelectSum() { DynamicQuery<Product> query1 = DynamicQuery.createQuery(Product.class); Optional<BigDecimal> sumOptional = productDao.selectSumByDynamicQuery(Product::getPrice, query1); BigDecimal sum = sumOptional.get(); // 为了验证sum 对不对 我们把所有数据拿出来在内存sum 一下 List<Product> productList = productDao.selectAll(); BigDecimal expectedValue = new BigDecimal(productList.stream().mapToDouble(x -> x.getPrice().doubleValue()).sum()); assertEquals(0, expectedValue.compareTo(sum)); }
我们同样看一下输出日志
==> Preparing: SELECT SUM(price) FROM product ==> Parameters: <== Columns: SUM(PRICE) <== Row: 75.0000 <== Total: 1
在 Sum 的时候为了保证不越界,字段类型 和返回值对应关系为
对某个列进行 avg 操作(计算平均值)。
@Test public void testSelectAvg() { DynamicQuery<Product> query1 = DynamicQuery.createQuery(Product.class); Optional<BigDecimal> avgOptional = productDao.selectAvgByDynamicQuery(Product::getPrice, query1); BigDecimal sum = avgOptional.get(); // 为了验证avg 对不对 我们把所有数据拿出来在内存avg 一下 List<Product> productList = productDao.selectAll(); BigDecimal expectedValue = new BigDecimal(productList.stream().mapToDouble(x -> x.getPrice().doubleValue()).average().getAsDouble()); assertEquals(0, expectedValue.compareTo(sum)); }
我们同样看一下输出日志
==> Preparing: SELECT AVG(price) FROM product ==> Parameters: <== Columns: AVG(PRICE) <== Row: 15 <== Total: 1
比如整型做完平均值会变成小数,所以我们把所有返回值变成 BigDecimal
现在都在做一些修修补补,希望下次有个大功能上线,还有大家在疫情下都保护好自己。