MyBatis-Plus的多种条件用法,MyBatis-Plus的多种查询写法,MyBatis-Plus的条件构造器用法

MyBatis-Plus的条件构造器用法

  • 前言
  • 实现
    • 通用
    • 查询
      • 获取条件构造对象
      • 条件判断
      • 条件-或者
      • 范围查询
      • 查询绝对一条
      • 排序
      • 查询部分字段
      • 查询不需要指定字段
      • 查询所有字段,但修改指定字段
      • 分页查询调用

前言

使用版本:mybatis-plus 3.4.0
此处只是为了记录大概用法,实际会可以点.出很多操作,一个个自己多试试清楚了
用法我部分分为两种,根据需求使用即可

实现

<dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-boot-starterartifactId>
    <version>3.4.0version>
dependency>

通用

相关实体类参考

NewsEntity.java

查询

参考:https://www.baomidou.com/pages/10c804/#gt

获取条件构造对象

// 普通查询
QueryWrapper<NewsEntity> queryWrapper = new QueryWrapper<>();
// lambda 查询对象
LambdaQueryWrapper<NewsEntity> lambdaQuery = new LambdaQueryWrapper<>();

关键对象:com.baomidou.mybatisplus.core.toolkit.Wrappers
Wrappers已经将new对象封装,可返回多种

// 普通查询
QueryWrapper<NewsEntity> queryWrapper = Wrappers.query();
// lambda 查询对象
LambdaQueryWrapper<NewsEntity> lambdaQuery = Wrappers.lambdaQuery();

条件判断

普通

QueryWrapper<NewsEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("type", entity.getType());
queryWrapper.like("title", entity.getTitle());

lambda 1

QueryWrapper<NewsEntity> queryWrapper = Wrappers.query();
// type是Integer类型,判断是否不为空,满足则执行
queryWrapper.lambda().eq(ObjectUtil.isNotNull(entity.getType()), NewsEntity::getType, entity.getType());
// title是string类型,判断是否不为空,满足则执行
queryWrapper.lambda().like(StrUtil.isNotEmpty(entity.getTitle()), NewsEntity::getTitle, entity.getTitle());

lambda 2

LambdaQueryWrapper<NewsEntity> lambdaQuery = Wrappers.lambdaQuery();
// type是Integer类型,判断是否不为空,满足则执行
lambdaQuery.eq(ObjectUtil.isNotNull(entity.getType()), NewsEntity::getType, entity.getType());
// title是string类型,判断是否不为空,满足则执行
lambdaQuery.like(StrUtil.isNotEmpty(entity.getTitle()), NewsEntity::getTitle, entity.getTitle());

这里用到的是eq(等于)、like(全模糊查询),官方还有ne(不等于)、gt(大于)、ge(大于等于)、lt(小于)、le(小于等于)…等等,该有的都会有(点击上面那个链接查看)

条件-或者

单单用or

lambdaQuery.eq(NewsEntity::getType, 1).or().eq(NewsEntity::getType, 2);

多条件

wrapper.lambda().like(NewsEntity::getTitle, "所");
wrapper.lambda().and(w -> w.eq(NewsEntity::getType, 1).or().eq(NewsEntity::getType, 2));

范围查询

方式一

wrapper.lambda().between(NewsEntity::getReleaseTime, "2023-08-08 18:00:00", "2023-08-09 00:00:00");

方式二

wrapper.lambda().ge(NewsEntity::getReleaseTime, "2023-08-08 18:00:00");
wrapper.lambda().le(NewsEntity::getReleaseTime, "2023-08-09 00:00:00");

查询绝对一条

在条件最后面加

queryWrapper.last(" limit 1");

排序

普通

queryWrapper.orderByAsc(" createDate, type");

lambda

queryWrapper.lambda().orderByDesc(NewsEntity::getCreateDate, NewsEntity::getType);

查询部分字段

普通

queryWrapper.select(" id, title, content, release_time");

lambda

lambdaQuery.select(NewsEntity::getId, NewsEntity::getTitle, NewsEntity::getContent, NewsEntity::getReleaseTime);

查询不需要指定字段

我只会QueryWrapper的方式

// 不需要查询返回这些字段
queryWrapper.select(NewsEntity.class, vo -> !vo.getColumn().equals("release_time")
            && !vo.getColumn().equals("id")
            && !vo.getColumn().equals("content"));

查询所有字段,但修改指定字段

我只会QueryWrapper的方式

// 不需要查询返回release_time这个字段
queryWrapper.select(NewsEntity.class, vo -> !vo.getColumn().equals("release_time"));
// 且重新拼接返回字段,修改release_time时间格式再拼接
queryWrapper.select(queryWrapper.getSqlSelect() + ", convert(varchar(19), release_time,120) as releaseTime");

分页查询调用

// 分页查询
int page = 1;
int limit = 10;
IPage<NewsEntity> iPage = newsService.page(new Page<>(page, limit), queryWrapper);
// 常用返回值
List<NewsEntity> list = iPage.getRecords();
long count = iPage.getTotal();

你可能感兴趣的:(后端封装效果,数据库,MySql,mybatis,mybatisplus,java,springboot,mysql)