AI智能
改变未来

Mybatis-Plus – 条件构造器 QueryWrapper 的使用

目录

  • 前言
  • 查询示例
  • 基础代码
  • QueryWrapper的基本使用
  • QueryWrapper的lambada写法
  • LambadaQueryWrapper的使用
  • LambdaQueryChainWrapper的链式调用

前言

记录下

Mybatis-Plus

中条件构造器

Wrapper

的一些基本用法。

查询示例

  • 表结构
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_ciCREATE 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
@GetMapping(\"/{id}\")public ProductWithItemsVo getWithItems(@PathVariable Integer id) {return productService.getWithItems(id);}
  • 56cProductService.java
public interface ProductService {ProductWithItemsVo getWithItems(Integer id);}
  • ProductServiceImpl.java
@Servicepublic class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {@Autowiredprivate ProductItemMapper productItemMapper;@Overridepublic ProductWithItemsVo getWithItems(Integer id) {// 实现代码}}
  • mapper
@Repositorypublic interface ProductMapper extends BaseMapper<Product> {}@Repositorypublic interface ProductItemMapper extends BaseMapper<ProductItem> {}
  • model
@Getter@Setter@TableName(\"product\")public class Product {private Integer id;private String title;@JsonIgnoreprivate Date createTime;}@Getter@Setter@TableName(\"product_item\")public class ProductItem {private Integer id;private Integer productId;private String title;@JsonIgnoreprivate Date createTime;}
  • vo

    出参

@Data@NoArgsConstructorpublic class ProductWithItemsVo {private Integer id;private String title;List<ProductItem> items;/***ad0构造ProductWithItemsVo对象用于出参* @param product* @param items*/public ProductWithItemsVo(Product product, List<ProductItem> items) {BeanUtils.copyProperties(product, this);this.setItems(items);}}

QueryWrapper的基本使用

@Overridepublic 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写法

@Overridepublic 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

    的方式:

/*** 方式一*/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(wrappead8r2);
  • 完整代码
@Overridepublic 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的链式调用

@Overridepublic 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

– End -﹀﹀﹀梦想是咸鱼关注一下吧

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Mybatis-Plus – 条件构造器 QueryWrapper 的使用