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/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » mybatis-dynamic-query 3.1.14 更新

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址