mybatis-dynamic-query 2.0.3 更新

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

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

结束

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


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

查看所有标签

猜你喜欢:

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

Linux内核设计与实现

Linux内核设计与实现

拉芙 / 陈莉君、唐华、张波 / 机械工业出版社 / 2006-1 / 38.00元

《Linux内核设计与实现》基于Linux2.6内核系列详细介绍Linux内核系统,覆盖了从核心内核系统的应用到内核设计与实现等各方面的内容。主要内容包括:进程管理、系统调用、中断和中断处理程序、内核同步、时间管理、内存管理、地址空间、调试技术等。本书理论联系实践,既介绍理论也讨论具体应用,能够带领读者快速走进Linux内核世界,真正开发内核代码。 本书适合作为高等院校操作系统课程的教材......一起来看看 《Linux内核设计与实现》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具