mybatis-dynamic-query 2.0.3 更新

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

内容简介:前段时间一直忙项目,而且一直在用 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

结束

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


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

查看所有标签

猜你喜欢:

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

自媒体写作,从基本功到实战方法

自媒体写作,从基本功到实战方法

余老诗 / 清华大学出版社 / 2018-9-1 / 59.00元

《自媒体写作》是一本系统而通俗易懂的自媒体写作指导书。 全书共分为10章,分别从写作基本功、新媒体认知、新媒体传播规律和自媒体作者阅读写作素养以及如何进阶等方面展开,结合简书、公众号、今日头条等主流自媒体所选例文,讲解写作知识和新媒体特点,内容详实,有理有据,非常适合自媒体写作爱好者自学。 尤其值得一提的是,写作基本功部分从原理、方法和技巧三个层面展开论说,让自媒体写作学习者既能从根本......一起来看看 《自媒体写作,从基本功到实战方法》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具