mybatis-dynamic-query 2.0.3 更新

栏目: Java · 发布时间: 5年前

内容简介:前段时间一直忙项目,而且一直在用 typescript 写动态查询,结果一看 java 版本已经一年没有更新了,感觉要加点东西了。更新了两点:默认来说,我们会把所有的字段全部返回,有些字段我们不想返回,比如 password

前段时间一直忙项目,而且一直在用 typescript 写动态查询,结果一看 java 版本已经一年没有更新了,感觉要加点东西了。

2.3 更新

更新了两点:

  1. 支持选择字段查询
  2. 支持链式调用在 DynamicQuery 类中

选择字段查询

默认来说,我们会把所有的字段全部返回,有些字段我们不想返回,比如 password

下面我们来看个例子:

  1. 创建一个实体 Entity
@Table(name = "product")
public class Product{
    @Column(name = "product_id", insertable = false, updatable = false)
    private Integer productID;
    private String productName;
    private BigDecimal price;
    private Integer categoryID;

    ...
}
  1. 创建我们 Dao 继承自 DynamicQueryMapper
public interface ProductDaoextends DynamicQueryMapper<Product>{
}
  1. 利用 addSelectField 方法来描述我们需要哪些字段,这里例子中,我们只需要:productName, price.
@Test
public void testSelectFields(){
    DynamicQuery<Product> dynamicQuery = DynamicQuery.createQuery(Product.class)
            .addSelectField(Product::getProductName)
            .addSelectField(Product::getPrice);

    List<Product> products = PageHelper.startPage(0, 3, false)
                .doSelectPage(() -> productDao.selectByDynamicQuery(dynamicQuery));

    for (Product p : products) {
        // categoryID ignore to select
        assertEquals(null, p.getCategoryID());
        assertEquals(true, StringUtils.isNotBlank(p.getProductName()));
    }
}
  1. 我们同样可以看一下 mybatis 控制台输出结果, 确实我们只选择了 productName 和 price
==>  Preparing: SELECT price AS price, product_name AS product_name FROM product LIMIT 3
==> Parameters:
<==    Columns: PRICE, PRODUCT_NAME
<==        Row: 18.0000, Northwind Traders Chai
<==        Row: 7.5000, Northwind Traders Syrup
<==        Row: 16.5000, Northwind Traders Cajun Seasoning
<==      Total: 3

链式调用

为了让代码写的比较舒服,不用再手动 new FilterDescritpor 了。

@Resource
private ProductDao productDao;

@Test
public void testLinkOperation(){
    DynamicQuery<Product> dynamicQuery = DynamicQuery.createQuery(Product.class)
            .addSelectField(Product::getProductID)
            .addSelectField(Product::getProductName)
            .addSelectField(Product::getPrice)
            .addFilterDescriptor(Product::getPrice, FilterOperator.GREATER_THAN, 16)
            .addSortDescriptor(Product::getPrice, SortDirection.DESC)
            .addSortDescriptor(Product::getProductID, SortDirection.DESC);

    List<Product> products = PageHelper.startPage(0, 100, false)
            .doSelectPage(() -> productDao.selectByDynamicQuery(dynamicQuery));

    for (Product p : products) {
        // categoryID ignore to select
        assertEquals(null, p.getCategoryID());
        assertEquals(true, StringUtils.isNotBlank(p.getProductName()));
        // price > 16
        assertEquals(1, p.getPrice().compareTo(BigDecimal.valueOf(16)));
    }
}

看一下输出结果和用 new FilterDescriptor,new SortDesciptor 效果是一样的, 并且在价格一样的时候,ID 是倒叙排列的。

==>  Preparing: SELECT product_id AS product_id, price AS price, product_name AS product_name FROM product WHERE (price > ?) ORDER BY price DESC, product_id DESC LIMIT 100
==> Parameters: 16(Integer)
<==    Columns: PRODUCT_ID, PRICE, PRODUCT_NAME
<==        Row: 1, 18.0000, Northwind Traders Chai
<==        Row: 4, 16.5000, Northwind Traders Olive Oil
<==        Row: 3, 16.5000, Northwind Traders Cajun Seasoning
<==      Total: 3

结束

时隔一年已经在项目中一直使用,感觉还是蛮顺手的,希望大家能支持一下。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Algorithms and Theory of Computation Handbook

Algorithms and Theory of Computation Handbook

Mikhail J. Atallah (Editor) / CRC-Press / 1998-09-30 / USD 94.95

Book Description This comprehensive compendium of algorithms and data structures covers many theoretical issues from a practical perspective. Chapters include information on finite precision issues......一起来看看 《Algorithms and Theory of Computation Handbook》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具