mybatis-dynamic-query 3.1.7 更新

更新版本到 3.1.7,这次主要是一个小版本的更新,加了三个比较有用的方法,selectFirstByDynamicQuery, selectMaxByDynamicQuery, selectMinByDynamicQuery

更新内容

selectFirstByDynamicQuery

选择第一个, 这个和 selectOne 要区别开来,selectOne 是有且只有个一个,多了要报错,selectFirst 是你有多个也没关系,但是我只取第一个

@Test
public void testSelectFirst() {
    DynamicQuery<ProductsDO> query = DynamicQuery.createQuery(ProductsDO.class)
            .and(ProductsDO::getId, greaterThan(2))
            .orderBy(ProductsDO::getId, asc());
    // 因为过滤掉了2 , 再按照id 升序,那么第二个id值一定是3
    Optional<ProductsDO> productsDOOptional = productMapper.selectFirstByDynamicQuery(query);
    Assert.assertTrue(productsDOOptional.isPresent());
    Integer expectedValue = 3;
    Integer actualValue = productsDOOptional.get().getId();
    Assert.assertEquals(expectedValue, actualValue);
}

selectMaxByDynamicQuery

选择最大值,这个就比较好理解了,就是调用 max 函数

@Test
public void testSelectMax() {
    // 查看最大值的比较可以用,我们倒叙获得的值和最大值进行比较
    // 直接用max 函数获取价格最大值
    DynamicQuery<ProductsDO> selectMaxQuery = DynamicQuery.createQuery(ProductsDO.class)
            .and(ProductsDO::getId, greaterThan(10));
    Optional<BigDecimal> maxPriceOptional =
            productMapper.selectMaxByDynamicQuery(ProductsDO::getListPrice, selectMaxQuery);
    Assert.assertTrue(maxPriceOptional.isPresent());
    BigDecimal actualMaxPrice = maxPriceOptional.get();
    // 间接倒叙获得价格最大值
    DynamicQuery<ProductsDO> selectFirstQuery = DynamicQuery.createQuery(ProductsDO.class)
            .select(ProductsDO::getListPrice)
            .and(ProductsDO::getId, greaterThan(10))
            .orderBy(ProductsDO::getListPrice, desc());
    Optional<ProductsDO> productsDOOptional = productMapper.selectFirstByDynamicQuery(selectFirstQuery);
    Assert.assertTrue(productsDOOptional.isPresent());
    BigDecimal expectedMaxPrice = productsDOOptional.get().getListPrice();
    Assert.assertEquals(expectedMaxPrice, actualMaxPrice);
}

我们也可以看一下日志输出

--  12  2019-11-20 22:51:57.634 DEBUG 11812 --- [           main] c.g.w.m.m.P.selectMaxByDynamicQuery      : ==>
SELECT MAX(list_price)
        FROM products
WHERE (id > 10);
------------------------------------------------------------------------------------------------------------------------
--  13  2019-11-20 22:51:58.508 DEBUG 11812 --- [           main] .g.w.m.m.P.selectRowBoundsByDynamicQuery : ==>
SELECT list_price AS list_price
FROM products
WHERE (id > 10) ORDER BY list_price DESC
LIMIT 1;

selectMinByDynamicQuery

选择最小值,就是调用 min 函数

@Test
public void testSelectMin() {
    // 直接用min 函数获取价格最小值
    DynamicQuery<ProductsDO> selectMinQuery = DynamicQuery.createQuery(ProductsDO.class)
            .and(ProductsDO::getId, greaterThan(10));
    Optional<BigDecimal> minPriceOptional =
            productMapper.selectMinByDynamicQuery(ProductsDO::getListPrice, selectMinQuery);
    Assert.assertTrue(minPriceOptional.isPresent());
    BigDecimal actualMinPrice = minPriceOptional.get();
    // 间接正序获取价格最小值
    DynamicQuery<ProductsDO> selectFirstQuery = DynamicQuery.createQuery(ProductsDO.class)
            .select(ProductsDO::getListPrice)
            .and(ProductsDO::getId, greaterThan(10))
            .orderBy(ProductsDO::getListPrice, asc());
    Optional<ProductsDO> productsDOOptional = productMapper.selectFirstByDynamicQuery(selectFirstQuery);
    Assert.assertTrue(productsDOOptional.isPresent());
    BigDecimal expectedMinPrice = productsDOOptional.get().getListPrice();
    Assert.assertEquals(expectedMinPrice, actualMinPrice);
}

我们也可以看一下日志输出

--  26  2019-11-20 23:25:32.043 DEBUG 14740 --- [           main] c.g.w.m.m.P.selectMinByDynamicQuery      : ==>
SELECT MIN(list_price)
 FROM products
 WHERE (id > 10);
------------------------------------------------------------------------------------------------------------------------
--  27  2019-11-20 23:25:32.749 DEBUG 14740 --- [           main] .g.w.m.m.P.selectRowBoundsByDynamicQuery : ==>
SELECT list_price AS list_price
 FROM products
 WHERE (id > 10) ORDER BY list_price ASC
 LIMIT 1;

小结

忙了 3 个月了,终于有空更新一下… 后面已经在构思动态查询查 elasticsearch。

原文 

https://wz2cool.github.io/2019/11/20/mdq3-1-7/

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

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

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

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

评论 0

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