MybatisPlus之条件构造器

具体使用请参考官网Mybatis官网

MybatisPlus之条件构造器

前言

在MP中,Wrapper接⼝的实现类关系如下:

未命名.png

可以看到,AbstractWrapper和AbstractChainWrapper是重点实现,接下来我们重点学习 AbstractWrapper以及其⼦类。

说明 :
QueryWrapper(LambdaQueryWrapper)和UpdateWrapper(LambdaUpdateWrapper) 的 ⽗ 类⽤于⽣成 sql 的 where 条件, entity 属性也⽤于⽣成 sql 的 where 条件注意: entity ⽣成的 where 条件与 使⽤各个 api ⽣成的 where 条件没有任何关联⾏为

官⽹⽂档地址:mybatis.plus/guide/wrapp…

1 、allEq

1.1 、说明

allEq(Map<R, V> params)
allEq(Map<R, V> params, boolean null2IsNull)
allEq(boolean condition, Map<R, V> params, boolean null2IsNull)
复制代码
  • 全部eq(或个别isNull)

个别参数说明:

  • params : key 为数据库字段名, value 为字段值

null2IsNull : 为 true 则在 map 的 value 为 null 时调⽤ isNull ⽅法,为 false时则忽略 value 为 null 的
例1: allEq({id:1,name:"⽼王",age:null}) ---> id = 1 and name = '⽼王' and age is null
例2: allEq({id:1,name:"⽼王",age:null}, false) ---> id = 1 and name = '⽼王'

1.2 、测试⽤例

@Test
public void testAllEq(){

  QueryWrapper<User> queryWrapper = new QueryWrapper<>();

  // 构建map
  Map<String, Object> map = new HashMap<>();
  map.put("name","jack");
  map.put("age",null);

  //  WHERE name = ? AND age IS NULL
  // queryWrapper.allEq(map);

  // WHERE name = ?
  //  queryWrapper.allEq(map,false);

  // SELECT id,name,age,email AS mail,user_name FROM tb_user
  // queryWrapper.allEq(false,map,true);

  // WHERE age IS NULL
  queryWrapper.allEq((k,v) -> k.equals("name"),map);

  List<User> users = userMapper.selectList(queryWrapper);
  for (User user : users) {
    System.out.println(user);
  }
}
复制代码

2 、基本⽐较操作

  • eq 等于 =
  • ne 不等于 <>
  • gt ⼤于 >
  • ge ⼤于等于 >=
  • lt ⼩于 <
  • le ⼩于等于 <=
  • between BETWEEN 值1 AND 值2
  • notBetween NOT BETWEEN 值1 AND 值2
  • in 字段 IN (value.get(0), value.get(1), ...)
  • not In 字段 NOT IN (v0, v1, ...)

测试⽤例:

/*
     基本比较操作
  */
@Test
public void testWrapper(){

  QueryWrapper<User> queryWrapper = new QueryWrapper<>();

  // WHERE email = ? AND age >= ? AND name IN (?,?)
  queryWrapper.eq("email","[email protected]")
    .ge("age",20)
    .in("name","子慕","应颠");

  List<User> users = userMapper.selectList(queryWrapper);
  for (User user : users) {
    System.out.println(user);
  }
}
复制代码

3 、模糊查询

  • like
    • LIKE '%值%'
    • 例: like("name", "王") ---> name like '%王%'
  • notLike
    • NOT LIKE '%值%'
    • 例: notLike("name", "王") ---> name not like '%王%'
  • likeLeft
    • LIKE '%值'
    • 例: likeLeft("name", "王") ---> name like '%王'
  • likeRight
    • LIKE '值%'
    • 例: likeRight("name", "王") ---> name like '王%'

测试⽤例:

/*
     模糊查询
 */
@Test
public void testWrapperLike(){

  QueryWrapper<User> queryWrapper = new QueryWrapper<>();

  queryWrapper.like("name","子");

  List<User> users = userMapper.selectList(queryWrapper);
  for (User user : users) {
    System.out.println(user);
  }
}
复制代码

4 、排序

  • orderBy
    • 排序:ORDER BY 字段, ...
    • 例 : orderBy(true, true, "id", "name") ---> order by id ASC,name ASC
  • orderByAsc
    • 排序:ORDER BY 字段, ... ASC
    • 例: orderByAsc("id", "name") ---> order by id ASC,name ASC
  • orderByDesc
    • 排序:ORDER BY 字段, ... DESC
    • 例: orderByDesc("id", "name") ---> order by id DESC,name DESC

测试⽤例:

/**
 * 排序操作
 */
public void orderByTest(){
  QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
  //以年龄的降序排列
  userQueryWrapper.orderByDesc("age");

  List<User> users = userMapper.selectList(userQueryWrapper);
  for (User user : users) {
    System.out.println(user);
  }
}
复制代码

5 、逻辑查询

  • or

    • 拼接 OR
    • 主动调⽤ or 表示紧接着下⼀个⽅法不是⽤ and 连接!(不调⽤ or 则默认为使⽤ and 连接)
  • and

    • AND 嵌套
    • 例: and(i -> i.eq("name", "李⽩").ne("status", "活着")) ---> and (name = '李)

测试⽤例:

/**
   逻辑查询、select
*/
@Test
public void testWrapper2(){

  QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  queryWrapper.eq("name","jack").or().eq("age",28).select("name");
  List<User> users = userMapper.selectList(queryWrapper);
  for (User user : users) {
    System.out.println(user);
  }
}
复制代码

猜你喜欢

转载自juejin.im/post/7036632525619331079