为什么需要条件构造器?
想要使用MybatisPlus完成条件查询,基于面向对象的思想,万物皆对象,那么查询条件也需要使用对象来完成封装。我们先看一下,在MybatisPlus中,和条件有关的类有哪些,他们之间有什么关系,理清楚了这个,我们在传递条件对象的时候,就很清晰了。
基本介绍
查询mybatisPlus源码可以看到,条件构造器wrapper继承情况:
Wrapper:条件构造器,最顶端的一个类 AbstractWrapper:用于sql语句条件的封装,主要是封装where条件 QueryWrapper:查询条件封装 UpdateWrapper:更新条件封装 AbstractLambdaWrapper:具有Lambda语法的条件封装 LambdaQueryWrapper:具有Lambda语法查询条件封装 LambdaUpdateWrapper:具有Lambda语法更新条件封装
Wrapper: 条件构造抽象类,最顶端父类
AbstractWrapper:用于查询条件封装,生成sql的where条件
QueryWrapper:查询条件封装 UpdateWrapper:Update条件封装 AbstractLambdaWrapper:使用Lambda语法 LambdaQueryWrapper:用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper:用于Lambda更新封装Wrapper
Wrapper
抽象类,条件类的顶层,提供了一些获取和判断相关的方法
代码语言:javascript复制public abstract class Wrapper<T> implements ISqlSegment
AbstractWrapper
抽象类,Wrapper的子类,提供了所有的条件相关方法
代码语言:javascript复制public abstract class AbstractWrapper<T, R, Children
extends AbstractWrapper<T, R, Children>> extends Wrapper<T>
implements Compare<Children, R>, Nested<Children, Children>, Join<Children>, Func<Children, R> {
AbstractLambdaWrapper
抽象类,AbstractWrapper的子类,确定字段参数为方法引用类型
Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column
代码语言:javascript复制public abstract class AbstractLambdaWrapper<T, Children
extends AbstractLambdaWrapper<T, Children>>
extends AbstractWrapper<T, SFunction<T, ?>, Children> {
QueryWrapper
类,AbstractWrapper的子类,如果我们需要传递String类型的字段信息,创建该对象
代码语言:javascript复制public class QueryWrapper<T>
extends AbstractWrapper<T, String, QueryWrapper<T>>
implements Query<QueryWrapper<T>, T, String>
LambdaQueryWrapper
类,AbstractLambdaWrapper的子类,如果我们需要传递方法引用方式的字段信息,创建该对象
代码语言:javascript复制public class LambdaQueryWrapper<T>
extends AbstractLambdaWrapper<T, LambdaQueryWrapper<T>>
implements Query<LambdaQueryWrapper<T>, T, SFunction<T, ?>> {
该图为以上各类的关系,我们在编写代码的时候,只需要关注QueryWrapper和LambdaQueryWrapper