前言
记录下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 ServiceImplimplements ProductService { @Autowired private ProductItemMapper productItemMapper; @Override public ProductWithItemsVo getWithItems(Integer id) { // 实现代码 } }
mapper
@Repository public interface ProductMapper extends BaseMapper{ } @Repository public interface ProductItemMapper extends BaseMapper { }
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; Listitems; /** * 构造ProductWithItemsVo对象用于出参 * @param product * @param items */ public ProductWithItemsVo(Product product, List 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 判断相等的值 */ QueryWrapperwrapper = new QueryWrapper<>(); wrapper.eq("product_id", id); List 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; } QueryWrapperwrapper = new QueryWrapper<>(); /** * lambda方法引用 */ wrapper.lambda().eq(ProductItem::getProductId, id); List productItems = productItemMapper.selectList(wrapper); return new ProductWithItemsVo(product, productItems); }
如上代码,通过条件构造器QueryWrapper
的lambda
方法引用查询出当前product
实例及其关联的product_item
LambadaQueryWrapper 的使用
LambadaQueryWrapper
用于Lambda
语法使用的QueryWrapper
- 构建
LambadaQueryWrapper
的方式:
/** * 方式一 */ LambdaQueryWrapperwrapper1 = 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);
完整代码
@Override public ProductWithItemsVo getWithItems(Integer id) { Product product = this.getById(id); if (Objects.isNull(product)) { System.out.println("未查询到product"); return null; } LambdaQueryWrapperwrapper = new LambdaQueryWrapper<>(); wrapper.eq(ProductItem::getProductId, id); List 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; } /** * 链式调用 */ ListproductItems = new LambdaQueryChainWrapper<>(productItemMapper) .eq(ProductItem::getProductId, id) .list(); return new ProductWithItemsVo(product, productItems); }
如上代码,通过链式调用查询出当前product
实例及其关联的product_item
到此这篇关于Mybatis-Plus - 条件构造器 QueryWrapper 的使用的文章就介绍到这了,更多相关Mybatis-Plus 条件构造器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!