mybatis-plus Wapper相关用法

Mybatis-plus中Wrapper、QueryWrapper、UpdateWrapper、lambdaQueryWrapper、lambdaUpdateWrapper

在项目中使用时,需导入mybatis-plus的jar包,maven项目需要在pom.xml文件中加入如下代码:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>

version中填入版本号,建议使用最新版本,目前官方最新版本为2022.2.14更新的3.5.1版本,最新版本请去GitHub上寻找,GitHub地址如下:
mybatis-plus 最新github地址

关于Wrapper、QueryWrapper、UpdateWrapper、lambdaQueryWrapper、lambdaUpdateWrapper之间有什么不同这里也简单说一下,后面四个都来源于wrapper这个抽象类,下面来看一下源码
lambdaQueryWrapper:

public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryWrapper<T>> implements Query<LambdaQueryWrapper<T>, T, SFunction<T, ?>> {...}

lambdaUpdateWrapper:

public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdateWrapper<T>> implements Update<LambdaUpdateWrapper<T>, SFunction<T, ?>> {...}

QueryWrapper:

public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>> implements Query<QueryWrapper<T>, T, String> {...}

UpdateWrapper:

public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T>> implements Update<UpdateWrapper<T>, String> {...}

这里可以看到,LambdaQueryWrapper和LambdaUpdateWrapper都继承自AbstractLambdaWrapper,那我们来看看AbstractLambdaWrapper的源码:

public abstract class AbstractLambdaWrapper<T, Children extends AbstractLambdaWrapper<T, Children>> extends AbstractWrapper<T, SFunction<T, ?>, Children> {...}

我们可以看到,AbstractLambdaWrapper是一个抽象类,和QueryWrapper、UpdateWrapper一样继承自AbstractWrapper抽象类,我们来看AbstractWrapper的源码:

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> {...}

AbstractWrapper抽象类继承自Wrapper。那Wrapper上面还有没有呢?看一下源码:

public abstract class Wrapper<T> implements ISqlSegment {...}

Wrapper没有再继承其他类,所以他们的关系是下面这样:
wapper、Querywapper、UpdateWapper、lambdaQueryWapper、lambdaUpdateWapper之间关系

相关函数

eq

等于 =
代码:

wrapper.eq(User::getName,'张三')

等价于sql:

name = '张三'
ne

不等于 <>
同上

gt

大于 >
同上

ge

大于等于 >=
同上

lt

小于<
同上

le

小于等于<=
同上

between、notBetween

代码:

wrapper.between(User::getAge,18,30).notBetween(User::getAge,26,28)

等价于sql:

age between 18 and 30
and  age not between 26 and 28
like、notLike、likeLeft、likeRight

模糊匹配
代码:

wrapper.like(User::getName,'三');
wrapper.notLike(User::getName,'三');
wrapper.likeLeft(User::getName,'三');
wrapper.likeRight(User::getName,'三');

对应sql:

name like '%三%';
name not like '%三%';
name like '%三';
name like '三%';
isNull、isNotNull

不为空
代码:

wrapper.isNull(User::getName);
wrapper.isNotNull(User::getName);

等价于:

name is null;
name is not null;
in、notIn

代码:

in(User::getAge,{17,18,19})

等价于sql:

age in (17,18,19)
inSql、notInSql

代码:

wrapper.inSql(User1::getAge, "select age from user2");
wrapper.notInSql(User1::getAge, "select age from user2");

等价于sql:

user1.age in (select age from user2);
user1.age not in (select age from user2);
groupBy

代码:

wapper.groupBy(User::getType)

等价于sql:

groupBy type
orderBy、orderByAsc、orderByDesc

排序,ASC为顺序,DESC为逆序,sql中使用orderBy默认为顺序
代码:

wapper.orderByAsc(User::getAge)
wapper.order(true,true,User::getAge)

等价于sql:

orderBy age ASC
orderBy age ASC

使用

haveing

代码:

wrapper.having("sum(num) > {0}", 10)

等价于sql:

having sum(num) > 10

注意,这里的having必须用在聚合函数之后,也就是having后的判断字段必须是聚合函数返回的结果

or、and

sql中and的优先级高于or,如果不用.or()方法,默认用and连接
代码:

wrapper.eq(User::getName,"Ance").eq(User::getAge, 18);
Wrapper.eq(User::getAge, 18).or().eq(User::getName,"Ance");

等价于sql:

name = 'Ance' and age = 18;
age = 18 or name = 'Ance'
apply

拼接sql

last

无视优化规则直接拼接到sql最后

exists

拼接EXISTS(SQL语句)

notExists

拼接NOT EXISTS(SQL语句)

nested

正常嵌套不带and和or

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值