Mybatis-Plus 条件构造器 QueryWrapper 的基本用法
作者:Maggieq8324
这篇文章主要介绍了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_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
@GetMapping("/{id}") public ProductWithItemsVo getWithItems(@PathVariable Integer id) { return productService.getWithItems(id); }
ProductService.java
public interface ProductService { ProductWithItemsVo getWithItems(Integer id); }
ProductServiceImpl.java
@Service public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService { @Autowired private ProductItemMapper productItemMapper; @Override public ProductWithItemsVo getWithItems(Integer id) { // 实现代码 } }
mapper
@Repository public interface ProductMapper extends BaseMapper<Product> { } @Repository public interface ProductItemMapper extends BaseMapper<ProductItem> { }
model
@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出参
@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 的基本使用
@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写法
@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
的方式:
/** * 方式一 */ 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);
完整代码
@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 的链式调用
@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 条件构造器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!