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

前言
记录下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,如下:
Mybatis-Plus|Mybatis-Plus 条件构造器 QueryWrapper 的基本用法
文章图片

基础代码
ProductController.java
@GetMapping("/{id}")public ProductWithItemsVo getWithItems(@PathVariable Integer id) {return productService.getWithItems(id); }

ProductService.java
public interface ProductService {ProductWithItemsVo getWithItems(Integer id); }

ProductServiceImpl.java
@Servicepublic class ProductServiceImpl extends ServiceImpl implements ProductService { @Autowiredprivate ProductItemMapper productItemMapper; @Overridepublic ProductWithItemsVo getWithItems(Integer id) {// 实现代码}}

mapper
@Repositorypublic interface ProductMapper extends BaseMapper {}@Repositorypublic interface ProductItemMapper extends BaseMapper {}

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 items; /*** 构造ProductWithItemsVo对象用于出参* @param product* @param items*/public ProductWithItemsVo(Product product, List 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 wrapper = new QueryWrapper<>(); wrapper.eq("product_id", id); List 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 wrapper = new QueryWrapper<>(); /*** lambda方法引用*/wrapper.lambda().eq(ProductItem::getProductId, id); List productItems = productItemMapper.selectList(wrapper); return new ProductWithItemsVo(product, productItems); }

如上代码,通过条件构造器QueryWrapperlambda方法引用查询出当前product实例及其关联的product_item
LambadaQueryWrapper 的使用
  • LambadaQueryWrapper 用于Lambda语法使用的QueryWrapper
  • 构建LambadaQueryWrapper 的方式:
/*** 方式一*/LambdaQueryWrapper wrapper1 = new QueryWrapper().lambda(); wrapper1.eq(ProductItem::getProductId, id); List productItems1 = productItemMapper.selectList(wrapper1); /*** 方式二*/LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper<>(); wrapper2.eq(ProductItem::getProductId, id); List productItems2 = productItemMapper.selectList(wrapper2);

完整代码
@Overridepublic ProductWithItemsVo getWithItems(Integer id) {Product product = this.getById(id); if (Objects.isNull(product)) {System.out.println("未查询到product"); return null; }LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ProductItem::getProductId, id); List 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 productItems =new LambdaQueryChainWrapper<>(productItemMapper).eq(ProductItem::getProductId, id).list(); return new ProductWithItemsVo(product, productItems); }

如上代码,通过链式调用查询出当前product实例及其关联的product_item
【Mybatis-Plus|Mybatis-Plus 条件构造器 QueryWrapper 的基本用法】到此这篇关于Mybatis-Plus - 条件构造器 QueryWrapper 的使用的文章就介绍到这了,更多相关Mybatis-Plus 条件构造器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读