MybatisPlus---条件构造器和常用接口

一.初始wrapper

wrapper翻译为包装的意思,在执行mysql语句的时候,面对繁琐的条件语句(where,order by),我们不妨把这些条件都包装在一个类里,最后执行的时候进行自动拼接,这样不仅使代码简洁易懂,同时减少了代码冗余。

image.png

可以看到所有箭头最终归于到Wrapper,

  • Wrapper : 条件构造抽象类,最顶端父类
  • AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
  • QueryWrapper : 查询条件封装 UpdateWrapper : Update 条件封装
  • AbstractLambdaWrapper : 使用Lambda 语法 LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper
  • LambdaUpdateWrapper : Lambda 更新封装Wrapper
  • updateWrapper:Update 条件封装

image.png 三个方法中的形参都有需要对应类的条件构造器

二.Wrapper用法实解

一.QueryWrapper

1.组装查询条件

image.png 这里的between可以也可以用 gt(大于)、ge(大于等于)、lt(小于)、le(小于等于)的方法来代替

image.png

注意:自定义条件构造器时,拼接sql语句时会自动加上and,如果要加上or的话,需要手动添加

Preparing:

SELECT cat_id,cat_name,gender,peculiarity,status,place,avatar,is_deleted FROM cat WHERE is_deleted=0 AND (cat_name LIKE ? AND cat_id >= ? AND cat_id <= ? AND avatar IS NOT NULL)

Parameters: %12%(String), 50(Integer), 60(Integer)

Total: 0
复制代码

2.组装删除条件 删除条件依旧用的是queryWrapper

image.png

3.条件的优先级

已知and的优先级大于or,当我们单独在条件构造器中使用一个or时,会将or前后的条件逐一判断出来,最后两两对比。

image.png

queryMapper中的and方法里也可以添加一个条件构造器,在and里我们用一个lambda表达式, 最后在执行sql中会优先执行lambda中的条件判断,因为执行过程中在lambda里的条件判断会加上一对括号

image.png

image.png

image.png 4.组装select语句

在实际开发有些地方并不需要用到全部的数据,这时我们可以自定义选择需要查询的字段,来减少无用的数据产生 selectList和selectMaps均可实现以上功能,不同的是,selectList会将字段对应的属性返回,你没有设置的要查询的字段会自动给你赋值为null,而selectMaps不会。同时返回值也不一样,前者返回的是List,后者为Map

queryWrapper中select方法 image.png

selectList image.png

selectMap image.png

5.实现子查询

在insql方法,添加sql语句以及限制条件的字段

SELECT cat_id,cat_name,gender,peculiarity,status,place,avatar,is_deleted FROM cat WHERE is_deleted=0 AND (cat_id IN (select cat_id where cat_id>50))

image.png

二.UpdateWrapper

做数据修改时,我们用到UpdateWrapper,并使用其set方法来实现修改,set之间会自动拼接上and,条件语句自动拼接where,这里没有实体类,便在update的entity参数位置设置null。

image.png

在此之前我们依旧可以用QueryMapper来实现修改功能,不过要创建一个对象,将要修改的值放到对象中,会有些麻烦

image.png

三.condition

在真正开发的过程中,组装条件是常见的功能,而这些条件数据来源于用户输入,是可选的,因 此我们在组装这些条件时,必须先判断用户是否选择了这些条件,若选择则需要组装该条件,若 没有选择则一定不能组装,以免影响SQL执行的结果

第一种方法 image.png

上面的实现方案没有问题,但是代码比较复杂,我们可以使用带condition参数的重载方法构建查 询条件,简化代码的编写

第二种方法

image.png

四.LambdaQueryWrapper

image.png

五、LambdaUpdateWrapper

image.png

猜你喜欢

转载自juejin.im/post/7095630472876654629
今日推荐