好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Mybatis-Plus 条件构造器 QueryWrapper 的基本用法

前言

记录下 Mybatis-Plus 中条件构造器 Wrapper 的一些基本用法。

查询示例

表结构

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

CREATE TABLE `product` (

   `id` int (11) unsigned NOT NULL AUTO_INCREMENT,

   `title` varchar (100) COLLATE utf8_unicode_ci DEFAULT NULL ,

   `create_time` datetime DEFAULT CURRENT_TIMESTAMP ,

   PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COLLATE =utf8_unicode_ci

 

CREATE TABLE `product_item` (

   `id` int (11) unsigned NOT NULL AUTO_INCREMENT,

   `title` varchar (100) COLLATE utf8_unicode_ci DEFAULT NULL ,

   `product_id` int (10) unsigned NOT NULL ,

   `create_time` datetime DEFAULT CURRENT_TIMESTAMP ,

   PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE =utf8_unicode_ci

实现需求:

根据 product - id 查询 product 实例及其关联的 product_item ,如下:

基础代码

ProductController.java

?

1

2

3

4

@GetMapping ( "/{id}" )

public ProductWithItemsVo getWithItems( @PathVariable Integer id) {

    return productService.getWithItems(id);

}

ProductService.java

?

1

2

3

public interface ProductService {

     ProductWithItemsVo getWithItems(Integer id);

}

ProductServiceImpl.java

?

1

2

3

4

5

6

7

8

9

10

@Service

public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {

     @Autowired

     private ProductItemMapper productItemMapper;

 

     @Override

     public ProductWithItemsVo getWithItems(Integer id) {

         // 实现代码

     }

}

mapper

?

1

2

3

4

5

6

7

8

9

@Repository

public interface ProductMapper extends BaseMapper<Product> {

 

}

 

@Repository

public interface ProductItemMapper extends BaseMapper<ProductItem> {

 

}

model

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

@Getter

@Setter

@TableName ( "product" )

public class Product {

 

     private Integer id;

 

     private String title;

 

     @JsonIgnore

     private Date createTime;

 

}

 

@Getter

@Setter

@TableName ( "product_item" )

public class ProductItem {

 

     private Integer id;

 

     private Integer productId;

 

     private String title;

 

     @JsonIgnore

     private Date createTime;

}

vo出参

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

@Data

@NoArgsConstructor

public class ProductWithItemsVo {

 

     private Integer id;

 

     private String title;

 

     List<ProductItem> items;

 

     /**

      * 构造ProductWithItemsVo对象用于出参

      * @param product

      * @param items

      */

     public ProductWithItemsVo(Product product, List<ProductItem> items) {

         BeanUtils.copyProperties(product, this );

         this .setItems(items);

     }

}

QueryWrapper 的基本使用

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

@Override

public ProductWithItemsVo getWithItems(Integer id) {

     Product product = this .getById(id);

     if (Objects.isNull(product)) {

         System.out.println( "未查询到product" );

         return null ;

     }

 

     /**

      * wrapper.eq("banner_id", id)

      * banner_id 数据库字段

      * id 判断相等的值

      */

     QueryWrapper<ProductItem> wrapper = new QueryWrapper<>();

     wrapper.eq( "product_id" , id);

     List<ProductItem> productItems = productItemMapper.selectList(wrapper);

 

     return new ProductWithItemsVo(product, productItems);

}

如上代码,通过条件构造器 QueryWrapper 查询出当前 product 实例及其关联的 product_item

QueryWrapper 的lambada写法

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

@Override

     public ProductWithItemsVo getWithItems(Integer id) {

         Product product = this .getById(id);

         if (Objects.isNull(product)) {

             System.out.println( "未查询到product" );

             return null ;

         }

 

         QueryWrapper<ProductItem> wrapper = new QueryWrapper<>();

         /**

          * lambda方法引用

          */

         wrapper.lambda().eq(ProductItem::getProductId, id);

         List<ProductItem> productItems = productItemMapper.selectList(wrapper);

 

         return new ProductWithItemsVo(product, productItems);

     }

如上代码,通过条件构造器 QueryWrapper 的 lambda 方法引用查询出当前 product 实例及其关联的 product_item

LambadaQueryWrapper 的使用

LambadaQueryWrapper 用于 Lambda 语法使用的 QueryWrapper 构建 LambadaQueryWrapper 的方式:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

/**

   * 方式一

   */

  LambdaQueryWrapper<ProductItem> wrapper1 = new QueryWrapper<ProductItem>().lambda();

  wrapper1.eq(ProductItem::getProductId, id);

  List<ProductItem> productItems1 = productItemMapper.selectList(wrapper1);

 

  /**

   * 方式二

   */

  LambdaQueryWrapper<ProductItem> wrapper2 = new LambdaQueryWrapper<>();

  wrapper2.eq(ProductItem::getProductId, id);

  List<ProductItem> productItems2 = productItemMapper.selectList(wrapper2);

完整代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

@Override

public ProductWithItemsVo getWithItems(Integer id) {

     Product product = this .getById(id);

     if (Objects.isNull(product)) {

         System.out.println( "未查询到product" );

         return null ;

     }

 

     LambdaQueryWrapper<ProductItem> wrapper = new LambdaQueryWrapper<>();

     wrapper.eq(ProductItem::getProductId, id);

     List<ProductItem> productItems = productItemMapper.selectList(wrapper);

 

     return new ProductWithItemsVo(product, productItems);

}

如上代码,通过条件构造器 LambdaQueryWrapper 查询出当前 product 实例及其关联的 product_item

LambdaQueryChainWrapper 的链式调用

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

@Override

     public ProductWithItemsVo getWithItems(Integer id) {

         Product product = this .getById(id);

         if (Objects.isNull(product)) {

             System.out.println( "未查询到product" );

             return null ;

         }

 

         /**

          * 链式调用

          */

         List<ProductItem> productItems =

                 new LambdaQueryChainWrapper<>(productItemMapper)

                         .eq(ProductItem::getProductId, id)

                         .list();

 

         return new ProductWithItemsVo(product, productItems);

     }

如上代码,通过链式调用查询出当前 product 实例及其关联的 product_item

到此这篇关于Mybatis-Plus - 条件构造器 QueryWrapper 的使用的文章就介绍到这了,更多相关Mybatis-Plus 条件构造器内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://HdhCmsTestcnblogs测试数据/maggieq8324/p/15239402.html

查看更多关于Mybatis-Plus 条件构造器 QueryWrapper 的基本用法的详细内容...

  阅读:20次