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
,如下:文章图片
基础代码
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); }
如上代码,通过条件构造器
QueryWrapper
的lambda
方法引用查询出当前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 条件构造器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- (七)谈条件
- Improve|Improve Nested Conditionals(优化嵌套的条件语句) 面对大量的if-else语句
- 无条件接纳
- vue中的条件判断详解v-if|vue中的条件判断详解v-if v-else v-else-if v-show
- [2018-02-22]|[2018-02-22] Git之远程仓库
- Nginx|Nginx Tomcat 构造https服务应对苹果要求
- 你对女婿有什么要求(这些丈母娘的回答忽略了婚姻最重要的条件)
- Go基础篇-控制语句和函数
- 2019年陕西省建筑中级工程师报名条件-建筑中级工程师报名条件
- GitHub秘钥配置