Skip to content

mybatis-plus

基础

and与or

@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;
}

@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;
}

@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;
}

@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;
}

@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;
}

misc

  • 默认设置值时 null 都不会被设置

https://blog.csdn.net/qq_39403545/article/details/85334250

但是实体类 type 为 int 的要改为 Integer, 后者才可以为 null. 如果 type 是 int 依然会被更新上默认值 0

自定义 sql join 查询

BaseMapper

1) 双表用一样的主键 id, 如何方便的获取数据并整合

  • xml 里定义原生 join
  • 分开获取
  • 主表=>detailList,副表=> Map
  • 构造 dto 时一般又有如下做法:
    • 以主表查询结果为主体:遍历 detailList, 可以通过 BeanUtil.copyProperties 方便的构造 dto,再按 id 匹配对应副表 detail 上的信息,手动补充值。

Notes

我常用的方法

  • selectMap 很方便!