转载

mybatis-dynamic-query 3.1.14 更新

更新版本到 3.1.14, 距离上次 3.1.7 又花了半年年,期间有种种客观原因,可能因为工作上的事情太忙,有些偷懒了,除了之前聊到的逻辑分页,这次在上个版本基础加上两个聚合函数 selectSumByDynamicQuery, selectAvgByDynamicQuery

更新内容

selectSumByDynamicQuery

对某个列进行 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 的时候为了保证不越界,字段类型 和返回值对应关系为

  • byte -> Long
  • Short -> Long
  • Integer -> Long
  • Long -> Long
  • Double -> BigDecimal
  • Float -> BigDecimal
  • BigDecimal -> BigDecimal

selectAvgByDynamicQuery

对某个列进行 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

  • byte -> BigDecimal
  • Short -> BigDecimal
  • Integer -> BigDecimal
  • Long -> BigDecimal
  • Double -> BigDecimal
  • Float -> BigDecimal
  • BigDecimal -> BigDecimal

小结

现在都在做一些修修补补,希望下次有个大功能上线,还有大家在疫情下都保护好自己。

原文  https://wz2cool.github.io/2020/07/05/mdq3-1-14/
正文到此结束
Loading...