mybatis-plus-查询和分页
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