我是靠谱客的博主 野性老师,这篇文章主要介绍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); }

如上代码,通过条件构造器QueryWrapperlambda方法引用查询出当前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 条件构造器内容请搜索靠谱客以前的文章或继续浏览下面的相关文章希望大家以后多多支持靠谱客!

最后

以上就是野性老师最近收集整理的关于Mybatis-Plus 条件构造器 QueryWrapper 的基本用法的全部内容,更多相关Mybatis-Plus内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(198)

评论列表共有 0 条评论

立即
投稿
返回
顶部