mybatis-plus-查询和分页

本文详细介绍了mybatis-plus的查询构造器Wrapper,包括QueryWrapper和UpdateWrapper的使用,以及各种查询条件如eq、ne、gt等。同时,文章还探讨了分页查询的实现,包括物理分页的配置和分页查询的步骤。
摘要由CSDN通过智能技术生成

1.查询构造器:wapper

在这里插入图片描述
QueryWrapper(LambdaQueryWrapper)和UpdateWrapper(LambdaUpdateWrapper)的父类用于生成sql的where条件,entity属性也用于生成sql的where条件。MP3.X开始支持lambda表达式,LambdaQueryWrapper,LambdaUpdateWrapper支持lambda表达式的构造条件查询。

  • 条件:
条件 说明
allEq 基于map的相等
eq 等于=
ne 不等于<>
gt 大于>
ge 大于等于>=
lt 小于 <
le 小于等于<=
between BETWEEN 值1 AND 值2
notBetween NOT BETWEEN 值1 AND 值2
like LIKE ‘%值%’
notLike NOT LIKE ‘%值%’
likeLeft LIKE ‘%值’
likeRight LIKE ‘值%’
isNull 字段 IS NULL
isNotNull 字段 IS NOT NULL
in 字段 IN(value1,value2,…)
notIn 字段 NOT IN(value1,value2,…)
inSql 字段 IN(sql语句) 例:InSql(“age”,“1,2,3”) --> age in(1,2,3) 例:inSql(“id”,“select id from table where id<3”) --> id in (select id from table where id<3)
notInSql 字段 NOT IN (sql语句)
groupBy GROUP BY 字段
orderByAsc 升序 ORDER BY 字段,…ASC
orderByDesc 降序 ORDER BY 字段,…DESC
orderBy 自定义字段排序 orderBy(true,true,“id”,“name”) --> order by id ASC,name ASC
having 条件分组
or OR语句,拼接 +OR 字段=值
and AND语句,拼接 +AND 字段加值
apply 拼接sql
last 在sql语句后拼接自定义条件
exists 拼接EXISTS(sql语句)例:exists(“select id from table where age = 1”) --> exists(select id from table where age = 1)
notExists 拼接 NOT EXISTS(sql语句)
nested 正常嵌套 不带AND或者OR
  • 1)QueryWrapper:查询条件封装类
方法 说明
select 设置查询字段select后面的内容
  • 2)UpdateWrapper:更新条件封装类
方法 说明
set 设置要更新的字段,MP拼接sql语句
setSql 参数是sql语句,MP不再处理语句

2.查询

2.1初始化表MyStudent

在这里插入图片描述

2.2进行查询

  • 1)allEq
    以Map为参数条件
 @Test
    public void testAllEq(){
   
        QueryWrapper<MyStudent> qw = new QueryWrapper<>();
        //组装条件
        Map<String,Object> param = new HashMap<>();
        //map<key,value> key列名,value:查询的值
        param.put("name","张三");
        param.put("age","22");
        param.put("status",1);

        qw.allEq(param);
        //调用MP自己的查询方法
        //SELECT id,name,age,email,status FROM my_student WHERE name = ? AND age = ?
        //WHERE name = ? AND age = ? AND status = ?
        List<MyStudent> myStudents = myStudentsDao.selectList(qw);
        myStudents.forEach(item-> System.out.println(item));
    }

1.Map对象中有key的value是null
使用的是qw.allEq(param,true);
结果:WHERE name = ? AND age IS NULL

2.Map对象中有key的value是null
qw.allEq(param,false);
结果:WHERE name = ?

结论:
allEq(map,boolean)
true:处理null值,where条件加入字段is null
false:忽略null,不作为where条件

@Test
   public void testAllEq2(){
   
       QueryWrapper<MyStudent> qw = new QueryWrapper<>();
       //组装条件
       Map<String,Object> param = new HashMap<>();
       //map<key,value> key列名,value:查询的值
       param.put("name","张三");
       //age是null
       param.put("age",null);

       //allEq第二个参数为true
       qw.allEq(param,false);
       //调用MP自己的查询方法
       List<MyStudent> myStudents = myStudentsDao.selectList(qw);
       myStudents.forEach(item-> System.out.println(item));
   }
  • 2)eq
/**
     * eq使用
     * eq("列名",值)
     */
    @Test
    public void testEq(){
   
        QueryWrapper<MyStudent> qw = new QueryWrapper<>();
        //组成条件
        qw.eq("name","李四");
        //WHERE name = ?
        List<MyStudent> myStudents = myStudentsDao.selectList(qw);
        myStudents.forEach(item-> System.out.println("查询eq:"+item));
    }
  • 3)ne
/**
    * ne使用
    * ne表示不等于<>
    * ne("列名",值)
    */
   @Test
   public void testNe(){
   
       QueryWrapper<MyStudent> qw = new QueryWrapper<>();
       //组成条件
       qw.ne("name","张三");
       //WHERE name <> ?
       List<MyStudent> myStudents = myStudentsDao.selectList(qw);
       myStudents.forEach(item-> System
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值