目录
- 前言
- 查询示例
- 基础代码
- 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 -﹀﹀﹀梦想是咸鱼关注一下吧