Mybatis-Plus的wapper条件构造器

wapper条件构造器

1 什么是条件构造器Wrapper

条件构造器Wrapper按照官方的给出的解释是用于生成 sql 的where 条件,但在使用的过程中,发现Wrapper不仅仅是用于拼接where条件,可以用于拼接set 语法,select语法。所以,wrapper准确的来说,更像mybatis中的<sql></sql>动态标签在sql任意位置完成sql片段组装。

2 wapper类体系结构

2.1 wapper类图结构

请添加图片描述

2.2 wapper各个类的介绍

  • Wapper:条件构造抽象类,最顶端父类
    • AbstractWrapper :用于查询条件封装,生成 sql的 where 条件
      • QueryWrapper: 查询条件封装
      • UpdateWrapper : Update 条件封装
      • AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析lambda 获取 column.
        • LambdaQueryWrapper: 通过lambda语法进行查询条件封装
        • LambdaUpdateWrapper :通过lambda语法进行Update 条件封装

3.项目实例

请添加图片描述

  • 实体类
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;

@Data
public class Employee {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private String password;
    private String email;
    private int age;
}
3.1 更新Wrapper

需求:将id=1的员工name修改为zhangsanfeng

3.1.1 UpdateWrapper
  • setsql方式
//需求:将id=1的员工name修改为zhangsanfeng
//UPDATE employee SET name='zhangsanfeng’ WHERE (id = ?)
@Test
    public void testUpdate01(){
        UpdateWrapper<Employee> wrapper = new UpdateWrapper<>();
        wrapper.eq("id",1);
        wrapper.setSql("name='zhangsanfeng'");
        //将语句提交到数据库
        employeeMapper.update(null,wrapper);
    }
  • set方式
//需求:将id=1的员工name修改为zhangsanfeng
//UPDATE employee SET name=? WHERE (id = ?)
@Test
    public void testUpdate02(){
        UpdateWrapper<Employee> wrapper = new UpdateWrapper<>();
        wrapper.eq("id",1);
        wrapper.set("name='zhangsanfeng'");
        //将语句提交到数据库
        employeeMapper.update(null,wrapper);
    }
  • setsql与set的区别
    setsql : 是将sql片段直接拼接到sql语句中
    set :通过占位符拼接SQL语句
3.1.2 LambdaUpdateWrapper
//需求:将id=1的员工name修改为zhangsanfeng
//UPDATE employee SET name=? WHERE (id = ?)
@Test
    public void testUpdate03(){
        LambdaUpdateWrapper<Employee> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(Employee::getId,1);
        wrapper.set(Employee::getName,"zhangsanfeng");
        //将语句提交到数据库
        employeeMapper.update(null,wrapper);
    }
  • LambdaUpdateWrapper的好处
    通过lambda解析对象获得值这样可以防止参数出错
3.2 查询Wrapper

需求:查询name=zhangsan , age=18 的员工信息只需查id,name 2列

3.2.1 QueryWrapper
//需求:查询name=zhangsan , age=18 的员工信息只需查id,name 2列
//SELECT id,name FROM employee WHERE (name = ? AND age = ?)
@Test
    public void testUpdate04(){
        QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        wrapper.select("id","name");
        wrapper.eq("name","zhangsan");
        wrapper.eq("age",18);
        //将语句提交到数据库处理
        employeeMapper.selectList(wrapper);
    }
3.2.2 LambdaQueryWrapper
//需求:查询name=zhangsan , age=18 的员工信息只需查id,name 2列
//SELECT id,name FROM employee WHERE (name = ? AND age = ?)
@Test
    public void testUpdate05(){
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(Employee::getId, Employee::getName);
        wrapper.eq(Employee::getName,"zhangsan");
        wrapper.eq(Employee::getAge,18);

        employeeMapper.selectList(wrapper);
    }

拓展

updatewrapper和queryWrapper可以相互替换吗?
  • 可以相互替换,只不过一般推荐使用queryWrapper
//需求:将id=1的员工name修改为zhangsanfeng
//UPDATE employee SET name='zhangsanfeng’ WHERE (id = ?)
@Test
    public void testUpdate01(){
    //UpdateWrapper与QueryWrapper这两种的到的数据是一样的
        //UpdateWrapper<Employee> wrapper = new UpdateWrapper<>();
        QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        wrapper.eq("id",1);
        wrapper.setSql("name='zhangsanfeng'");
        //将语句提交到数据库
        employeeMapper.update(null,wrapper);
    }
  • 对于这种替换,可以将UpdateWrapper和QueryWrapper理解为动态where,eq则为where后面的条件语句。
  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值