Mybatis Plus QueryWrapper复合用法详解

 更新时间:2022年01月11日 10:57:06   作者:LGVT  
这篇文章主要介绍了Mybatis Plus QueryWrapper复合用法详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。

QueryWrapper复合用法

Mybatis Plus作为一个强大的msql插件,简化了DAO许多操作,使得我们的代码看上去更加优雅一些;

这里主要记录一下QueryWrapper的复杂查询用法

LambdaQueryWrapper<T> queryWrapper = new QueryWrapper<T>().lambda();
queryWrapper.eq(DTO::gexxx, param);
queryWrapper.and(wrapper -> wrapper
        .eq(T::getxxx, param)
        .or()
        .like(T::getxxx, param));

使用QueryWrapper小结

mybatisplus自定义分页查询

接口:

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//实现类
 public PageList pageQuery(PageArgument pageArgument)  {
        //放入查询参数
        QueryWrapper queryWrapper=new  QueryWrapper ();
        //注意放入参数格式,关联查询要写别名
        queryWrapper.eq(StringUtils.isNotBlank(user.getId()), "b.id",user.getId());
      
        Page page = new Page();
        IPage<TestUser> temp = testMapper.pageQueryBaseline(new Page<TestUser>(pageArgument.getPage(), pageArgument.getRows()), queryWrapper);
        PageList pageList = new PageList();
        pageList.setTotal(temp.getTotal());
        pageList.setPageNum(pageArgument.getPage());
        pageList.setPageSize(pageArgument.getRows());
        pageList.setList(temp.getRecords());
        return pageList;
}
---------------------------------------------------------------------------
//Mapper接口
@Mapper
public interface TestMapper extends BaseMapper<TestUser> {
    <E extends IPage<TestUser>> E pageQueryTestUser(E page, @Param(Constants.WRAPPER) Wrapper<TestUser> queryWrapper);
}
--------------------------------------------------------------------------
sql自定义:
 <!-- 分页查询-->
    <select id="pageQueryTestUser" resultType="TestUser">
            select b.* from TestUser b
            inner join TestStudent  i on i.id=b.id  ${ew.customSqlSegment}
    </select>

其中ew.customSqlSegment

对应条件构造器queryWrapper里的条件,会在sql中自动拼接,不需要在sql中再写判断条件userId=#{userId}这样的。

QueryWrapper 设置参数几种格式

queryWrapper.eq(“userid”,“aa”); //相当于userid=#{userid}
queryWrapper.like(“userid”,“aa”); //相当于模糊查询
queryWrapper.eq(StringUtils.isNotBlank(user.getId()), “b.id”,user.getId()); //先判断这个参数是不是空,为空则不放入,不为空则放入参数
queryWrapper.isNull(“userid”) //相当于where userid is null

有关queryWrapper使用or条件时

把or条件单独隔离,不影响后边的条件

import java.util.function.Consumer;
 QueryWrapper queryWrapper = new QueryWrapper();
   Consumer<QueryWrapper> consumer = qw -> {
                qw.eq("module", "b管理");
                qw.or();
                qw.eq("module", "a管理");
            };
queryWrapper.and(consumer);
queryWrapper.eq("name", "123");

这样拼接出来的条件就是,Consumer就相当于一个括号把or条件独立了

where (module=‘a管理' or module=‘b管理') and name='123'

不用Consumer直接用.or(),就会导致条件变成这样:

where module=a管理' or module=‘b管理' and name=‘123'
or后边是—> module=‘b管理' and name=‘123'

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Data Redis对象缓存序列化问题解决

    Spring Data Redis对象缓存序列化问题解决

    相信在项目中,你一定是经常使用Redis,在使用时,有没有遇到同我一样,对象缓存序列化问题的呢,本文主要介绍了Spring Data Redis对象缓存序列化问题解决,感兴趣的可以了解一下
    2024-01-01
  • Spring中的接口重试机制解析

    Spring中的接口重试机制解析

    这篇文章主要介绍了Spring中的接口重试机制解析,大家在做项目的时候,往往会遇到一些接口由于网络抖动等问题导致接口响应超时等,这时候我们会希望能够按照一定的规则进行接口请求重试,需要的朋友可以参考下
    2024-01-01
  • Mybatis Plus 逆向工程介绍

    Mybatis Plus 逆向工程介绍

    这篇文章主要介绍了Mybatis Plus 逆向工程,文章通过Mybatis Plus 逆向工程相关资料及示例代码详细介绍,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考一下
    2022-01-01
  • 以实例讲解Objective-C中的KVO与KVC机制

    以实例讲解Objective-C中的KVO与KVC机制

    这篇文章主要介绍了以实例讲解Objective-C中的KVO与KVC机制,即Key-Value-Observing与Key-Value-Coding,需要的朋友可以参考下
    2015-09-09
  • 关于连接远程redis的流程

    关于连接远程redis的流程

    这篇文章主要介绍了关于连接远程redis的流程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • @Async注解的使用以及注解失效问题的解决

    @Async注解的使用以及注解失效问题的解决

    在Spring框架中,@Async注解用于声明异步任务,可以修饰类或方法,使用@Async时,必须确保方法为public,且类为Spring管理的Bean,启用异步任务需要在主类上添加@EnableAsync注解,默认线程池为SimpleAsyncTaskExecutor
    2024-09-09
  • java使用单向链表解决数据存储自定义排序问题

    java使用单向链表解决数据存储自定义排序问题

    本文主要介绍了java使用单向链表解决数据存储自定义排序问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 浅谈Java四种线程池及new Thread的弊端

    浅谈Java四种线程池及new Thread的弊端

    本文主要介绍了浅谈Java四种线程池及new Thread的弊端,详细的介绍了newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor四种的使用,感兴趣的可以了解一下
    2024-01-01
  • 一文带你玩转Java异常处理

    一文带你玩转Java异常处理

    这篇文章主要为大家介绍一下Java中的异常处理机制,文中通过示例为大家进行了详细的介绍,对我们学习有一定的帮助,感兴趣的可以了解一下
    2022-08-08
  • 44条Java代码优化建议

    44条Java代码优化建议

    代码优化的最重要的作用应该是:避免未知的错误。因此,在写代码的时候,从源头开始注意各种细节,权衡并使用最优的选择,将会很大程度上避免出现未知的错误,从长远看也极大的降低了工作量
    2018-03-03

最新评论