第一种:==QueryWrapper==

 

lt: 小于(<) ,最终的sql语句为

SELECT id,name,password,age,tel FROM user WHERE (age < ?)

第一种方式介绍完后,有个小问题就是在写条件的时候,容易出错,比如age写错,就会导致查询不成功

第二种:==QueryWrapper的基础上使用lambda==

 

User::getAget,为lambda表达式中的,类名::方法名,最终的sql语句为:

SELECT id,name,password,age,tel FROM user WHERE (age < ?)

注意:构建LambdaQueryWrapper的时候泛型不能省。

此时我们再次编写条件的时候,就不会存在写错名称的情况,但是qw后面多了一层lambda()调用

第三种:==LambdaQueryWrapper==

这种方式就解决了上一种方式所存在的问题。

多条件构建

  • gt:大于(>),最终的SQL语句为

    SELECT id,name,password,age,tel FROM user WHERE (age < ? AND age > ?)
  • 构建多条件的时候,可以支持链式编程

    LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
    lqw.lt(User::getAge, 30).gt(User::getAge, 10);
    List<User> userList = userDao.selectList(lqw);
    System.out.println(userList);

查询数据库表中,年龄小于10或年龄大于30的数据

 or()就相当于我们sql语句中的or关键字,不加默认是and,最终的sql语句为:

SELECT id,name,password,age,tel FROM user WHERE (age < ? OR age > ?)

null判定

 

查询投影

目前我们在查询数据的时候,什么都没有做默认就是查询表中所有字段的内容,我们所说的查询投影即不查询所有字段,只查询出指定内容的数据。

select(...)方法用来设置查询的字段列,可以设置多个,最终的sql语句为:

SELECT id,name,age FROM user

如果使用的不是lambda,就需要手动指定字段

 

聚合查询

需求:聚合函数查询,完成count、max、min、avg、sum的使用

count:总记录数

max:最大值

min:最小值

avg:平均值

sum:求和

为了在做结果封装的时候能够更简单,我们将上面的聚合函数都起了个名称,方面后期来获取这些数据

 

分组查询

groupBy为分组,最终的sql语句为

SELECT count(*) as count,tel FROM user GROUP BY tel

注意:

  • 聚合与分组查询,无法使用lambda表达式来完成

  • MP只是对MyBatis的增强,如果MP实现不了,我们可以直接在DAO接口中使用MyBatis的方式实现

查询条件

前面我们只使用了lt()和gt(),除了这两个方法外,MP还封装了很多条件对应的方法,这一节我们重点把MP提供的查询条件方法进行学习下。

MP的查询条件有很多:

  • 范围匹配(> 、 = 、between)

  • 模糊匹配(like)

  • 空判定(null)

  • 包含性匹配(in)

  • 分组(group)

  • 排序(order)

  • ……

等值查询

需求:根据用户名和密码查询用户信息

  • eq(): 相当于 =,对应的sql语句为

    SELECT id,name,password,age,tel FROM user WHERE (name = ? AND password = ?)
  • selectList:查询结果为多个或者单个

  • selectOne:查询结果为单个

范围查询

需求:对年龄进行范围查询,使用lt()、le()、gt()、ge()、between()进行范围查询

  • gt():大于(>)

  • ge():大于等于(>=)

  • lt():小于(<)

  • lte():小于等于(<=)

  • between():between ? and ?

模糊查询

需求:查询表中name属性的值以J开头的用户信息,使用like进行模糊查询

  • like():前后加百分号,如 %J%

  • likeLeft():前面加百分号,如 %J

  • likeRight():后面加百分号,如 J%

排序查询

 

  • orderBy排序

    • condition:条件,true则添加排序,false则不添加排序

    • isAsc:是否为升序,true升序,false降序

    • columns:排序字段,可以有多个

  • orderByAsc/Desc(单个column):按照指定字段进行升序/降序

  • orderByAsc/Desc(多个column):按照多个字段进行升序/降序

  • orderByAsc/Desc

    • condition:条件,true添加排序,false不添加排序

    • 多个columns:按照多个字段进行排序

 

 

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐