MyBatis Plus 条件构造器queryWrapper与updateWrapper详解

版权申诉
15 下载量 117 浏览量 更新于2024-09-01 收藏 275KB PDF 举报
"mybatis plus条件构造器queryWrapper、updateWrapper" MyBatis Plus是一个扩展了MyBatis功能的框架,提供了更加便捷的数据操作API。在MyBatis Plus中,`queryWrapper` 和 `updateWrapper` 是两个重要的条件构造器,它们简化了SQL查询和更新语句的编写。 一、条件构造器关系 `queryWrapper` 和 `updateWrapper` 都继承自一系列的抽象类和接口,形成了一个层次结构。`Wrapper` 是所有条件构造器的顶层抽象类,它定义了一些基本的方法。`AbstractWrapper` 是一个具体的抽象类,用于生成SQL的`WHERE`条件。`AbstractLambdaWrapper` 是用于处理Lambda表达式的类,而`LambdaQueryWrapper` 和 `LambdaUpdateWrapper` 分别是Lambda语法下的查询和更新包装器。对于非Lambda的使用,`QueryWrapper` 用于查询操作,`UpdateWrapper` 用于更新操作。 二、项目实例与用法 在实际项目中,我们可以根据需求选择使用 `queryWrapper` 或 `updateWrapper`。以下是一些基本的用法: 1. QueryWrapper:主要用于数据查询。你可以通过这个构造器设置各种条件,如等于、不等于、大于、小于等,以及逻辑运算符(AND、OR)。例如: ```java QueryWrapper<User> query = new QueryWrapper<>(); query.eq("username", "test"); // 等于条件 query.or().like("email", "example%"); // OR条件 List<User> users = userMapper.selectList(query); ``` 2. UpdateWrapper:则用于数据更新。它的使用方式与 `queryWrapper` 类似,但主要用于构建更新语句的`SET`部分。比如: ```java UpdateWrapper<User> update = new UpdateWrapper<>(); update.set("status", 1).eq("id", 1); // 设置status为1,条件为id等于1 userMapper.update(user, update); ``` 三、Lambda表达式支持 如果你的项目使用了Java 8的Lambda表达式,可以使用 `LambdaQueryWrapper` 和 `LambdaUpdateWrapper`,它们使得代码更加简洁且易于阅读。例如: ```java LambdaQueryWrapper<User> lambdaQuery = new LambdaQueryWrapper<>(); lambdaQuery.eq(User::getId, 1).or().like(User::getEmail, "example%"); List<User> users = userMapper.selectList(lambdaQuery); LambdaUpdateWrapper<User> lambdaUpdate = new LambdaUpdateWrapper<>(); lambdaUpdate.set(User::getStatus, 1).eq(User::getId, 1); userMapper.update(user, lambdaUpdate); ``` 四、方法格式和说明 `queryWrapper` 和 `updateWrapper` 提供了一系列方法,如 `eq`(等于)、`ne`(不等于)、`gt`(大于)、`lt`(小于)等,以及`and`、`or` 用于组合条件。此外,还有 `like`(模糊匹配)、`between`(介于之间)、`isNull`(为空)和 `isNotNull`(不为空)等,满足不同的查询需求。 五、总结 MyBatis Plus的条件构造器极大地简化了数据库操作,无论是基本的条件查询还是复杂的组合查询,都能通过这些构造器轻松实现。通过熟练掌握 `queryWrapper` 和 `updateWrapper` 的使用,能有效提高开发效率,降低出错概率,使代码更加整洁和易维护。

package com.u.api.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.u.api.mapper.GoodsMapper; import com.u.api.mapper.ShopingCartMapper; import com.u.api.model.ShopingCart; import com.u.api.service.ShopingCartService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class ShopingCartServiceImpl extends ServiceImpl<ShopingCartMapper, ShopingCart> implements ShopingCartService { @Resource private ShopingCartMapper shopingCartMapper; @Resource private GoodsMapper goodsMapper; @Override public int add(ShopingCart shopingCart) { QueryWrapper<ShopingCart> qw = new QueryWrapper<>(); qw.eq("gid",shopingCart.getGid()); qw.eq("uid",shopingCart.getUid()); ShopingCart shopingCart1 = shopingCartMapper.selectOne(qw); int rs = 0; if(shopingCart1 == null){ shopingCart.setNum(1); rs = shopingCartMapper.insert(shopingCart); }else { UpdateWrapper<ShopingCart> updateWrapper = new UpdateWrapper(); updateWrapper.eq("uid",shopingCart.getUid()); updateWrapper.eq("gid",shopingCart.getGid()); updateWrapper.setSql("num = num + 1"); rs = shopingCartMapper.update(null,updateWrapper); } return rs; } @Override public int del(ShopingCart shopingCart) { QueryWrapper<ShopingCart> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("uid",shopingCart.getUid()); queryWrapper.eq("id",shopingCart.getId()); return shopingCartMapper.delete(queryWrapper); } @Override public List<ShopingCart> getShopingCart(String account) { QueryWrapper<ShopingCart> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("uid",account); List<ShopingCart> shopingCarts = shopingCartMapper.selectList(queryWrapper); return shopingCarts; } }详细解释一下这段代码使用了什么接口,什么类,怎么调用的,代码怎么实现的

2023-05-26 上传