栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

小书MybatisPlus第2篇-条件构造器的应用及总结

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

小书MybatisPlus第2篇-条件构造器的应用及总结

一、条件构造器Wrapper

Mybatis Plus为我们提供了如下的一些条件构造器,我们可以利用它们实现查询条件、删除条件、更新条件的构造。

条件构造器用于给如下的Mapper方法传参,通常情况下:

  • updateWrapper用于给update方法传条件参数
  • queryWrapper用于给delete和select方法传参
public interface baseMapper extends Mapper {

  int delete(@Param("ew") Wrapper wrapper);

  int update(@Param("et") T entity, @Param("ew") Wrapper updateWrapper);

  T selectOne(@Param("ew") Wrapper queryWrapper);

  Integer selectCount(@Param("ew") Wrapper queryWrapper);

  List selectList(@Param("ew") Wrapper queryWrapper);

  List> selectMaps(@Param("ew") Wrapper queryWrapper);

  List selectObjs(@Param("ew") Wrapper queryWrapper);

  IPage selectPage(IPage page, @Param("ew") Wrapper queryWrapper);

  IPage> selectMapsPage(IPage page, @Param("ew") Wrapper queryWrapper);
}

举例一:like 条件构造
String name = "字母";  //name不为空
String email = "";   //email为空串
QueryWrapper query = new QueryWrapper<>();
query.like(StringUtils.isNotEmpty(name), "name", name)
      //因为email为空串,该条件未生效
     .like(StringUtils.isNotEmpty(email), "email", email);    

List list = userMapper.selectList(query);
list.forEach(System.out::println);
  • QueryWrapper是查询条件构造器,like是一种条件构造函数,还有很多的条件构造函数。请参考:条件构造器

  • 几乎所有的条件构造函数,都提供了condition参数实现动态SQL。也就是参数判断是否返回true,如果返回false,该条件不成立。如email=“”,所以.like(StringUtils.isNotEmpty(email), "email", email); 的条件不成立。

  • 所以最终的执行SQL,如下(只有name LIKE条件,没有email LIKE 条件):

SELECT id,name,age,email,create_time 
FROM user 
WHERe name LIKE %字母%
举例二:allEq条件构造器
  • all表示所有
  • Eq是equal的缩写表示相等关系
//构造条件
QueryWrapper query = new QueryWrapper<>();
Map params = new HashMap<>();
params.put("name", "字母哥");
params.put("age", 18);
params.put("email", null);

// query.allEq(params,false);
query.allEq((k, v) -> !k.equals("name"), params, false);
List list = userMapper.selectList(query);
list.forEach(System.out::println);
  • 第一个参数是过滤器(可选参数),lambda表达式表示(k, v) -> !k.equals(“name”),参数的Key不能是name,所以params.put("name", "字母哥");这个查询条件被过滤掉
  • 第二个参数表示传入所有的params查询参数
  • 第三个参数(可选参数),表示如果值为null是否按IS NULL查询,false则忽略null列的查询,所以params.put("email", null);这个查询条件被过滤掉

最终执行的SQL如下:

SELECT id,name,age,email,create_time 
FROM user 
WHERe age = ?
更多构造器使用方法总结

请参考:官方文档:条件构造器

二、lambda条件构造器 举例一:
// LambdaQueryWrapper lambdaQ = new QueryWrapper().lambda();
// LambdaQueryWrapper lambdaQ = new LambdaQueryWrapper<>();
LambdaQueryWrapper lambdaQ = Wrappers.lambdaQuery();
lambdaQ.like(User::getName, "字母")
.lt(User::getAge, 18);
List list = userMapper.selectList(lambdaQ);

lambda条件构造器,最终执行SQL如下:

SELECT id,name,age,email,create_time
FROM user 
WHERe name LIKE %字母%
AND age < 18
举例二:
List list = new LambdaQueryChainWrapper(userMapper)
 .likeRight(User::getName, "字母")
 .and(q -> q.lt(User::getAge, 40)
    .or()
    .isNotNull(User::getEmail)
 )
 .list();
list.forEach(System.out::println);

lambda条件构造器,最终执行SQL如下:

SELECt id,name,age,email,create_time 
FROM user 
WHERe name LIKE '字母%'
AND ( age < 18 OR email IS NOT NULL )
欢迎关注我的博客,里面有很多精品合集
  • 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号