MybatisPlus中and和or的使用

简介: MybatisPlus中and和or的使用

需求


 最近自己玩发现MyBatisPlus还是挺好用的,但是忽然发现对于一个持久层框架来说支持拼接复杂的SQL也是一个优势,对一个持久层框架拼接SQL来说,or比and更难拼,所以此处用案例来实现MybatisPlus中or和and的简单使用。


代码下载(内含数据库)


ChaiRongD/Demooo - Gitee.com


8.png


and和or的使用


案例1:AandB


@GetMapping("/AandB")
    public Object AandB(){
        //SELECT id,name,age,sex FROM student WHERE (name = ? AND age = ?)
        List<Student> list = studentService.lambdaQuery().eq(Student::getName, "1").eq(Student::getAge, 1).list();
        return list;
    }


案例2:AorB


 @GetMapping("/AorB")
    public Object AorB(){
        //SELECT id,name,age,sex FROM student WHERE (name = ? OR age = ?)
        List<Student> list = studentService.lambdaQuery().eq(Student::getName, "1").or().eq(Student::getAge, 12).list();
        return list;
    }


案例3:A or(C and D)


@GetMapping("/A_or_CandD")
    public Object A_or_CandD() {
        //SELECT id,name,age,sex FROM student WHERE (name = ? OR (name = ? AND age = ?)) 
      List<Student> list =
          studentService
              .lambdaQuery()
              .eq(Student::getName, "1")
              .or(wp -> wp.eq(Student::getName, "1").eq(Student::getAge, 12))
              .list();
      return list;


案例4:(AandB)or(CandD)


@GetMapping("/AandB_or_CandD")
  public Object AandB_or_CandD() {
    // SELECT id,name,age,sex FROM student WHERE ((name = ? AND age = ?) OR (name = ? AND age = ?)) 
    List<Student> list =
        studentService
            .lambdaQuery()
            .and(wp -> wp.eq(Student::getName, "1").eq(Student::getAge, 12))
            .or(wp -> wp.eq(Student::getName, "1").eq(Student::getAge, 12))
            .list();
    return list;
  }


案例5:A or (B and ( C or D))


@GetMapping("/complex")
  public Object complex() {
    // SELECT * FROM student WHERE ((name <> 1) OR (name = 1 AND (age IS NULL OR age >= 11)))
    List<Student> list =
        studentService
            .lambdaQuery()
            .and(wp -> wp.ne(Student::getName, "1"))
            .or(
                wp ->
                    wp.eq(Student::getName, "1")
                        .and(wpp -> wpp.isNull(Student::getAge).or().ge(Student::getAge, 11)))
            .list();
    return list;
  }


总结


1 你可以让他打印SQL语句,这样你就知道知道的SQL了

2 我遇到的情况是不报错,不打印SQL,那只能DEBUG

3 手写SQL在mapper中也行

目录
相关文章
|
8月前
|
SQL 测试技术 数据库
一篇文章带你学会MybatisPlus~(三)
一篇文章带你学会MybatisPlus~
|
8月前
|
Java 数据库连接 mybatis
MybatisPlus(1)
MybatisPlus(1)
94 0
MybatisPlus(1)
|
8月前
|
Java 测试技术 数据库连接
【MyBatisPlus】MyBatisPlus 整合开发
【1月更文挑战第19天】【MyBatisPlus】MyBatisPlus 整合开发
|
SQL Java 数据库连接
Springoot 整合 MyBatisPlus
SpringBoot 整合 MyBatisPlus 的基本步骤,以及MyBatisPlus的基本使用步骤
115 0
|
8月前
|
SQL 监控 数据库
MybatisPlus入门(下)
MybatisPlus入门教程中介绍了如何使用拦截器和性能分析插件。配置拦截器只需添加`PaginationInterceptor`,测试分页查询显示底层使用了`limit`。逻辑删除功能通过`TableLogic`注解和`LogicSqlInjector`实现,性能分析插件`PerformanceInterceptor`用于监控SQL执行时间,超过设定值会抛出异常。条件构造器如`QueryWrapper`提供便捷的查询条件设置,支持多种比较操作。
|
8月前
|
存储 算法 Java
一篇文章带你学会MybatisPlus~(二)
一篇文章带你学会MybatisPlus~
479 0
|
8月前
|
SQL Java 数据库连接
一篇文章带你学会MybatisPlus~(一)
一篇文章带你学会MybatisPlus~
|
8月前
|
SQL Java 数据库
MybatisPlus(5)
MybatisPlus(5)
58 0
MybatisPlus(5)
|
8月前
|
Java 数据库连接 数据库
MybatisPlus(3)
MybatisPlus(3)
81 0
MybatisPlus(3)
|
8月前
|
XML SQL Java
MybatisPlus(2)
MybatisPlus(2)
89 0
MybatisPlus(2)