mp提供的条件构造器

本文详细介绍了使用MyBatis Plus的QueryWrapper进行复杂SQL查询的方法,包括条件筛选、排序、分组、聚合及更新删除操作,适用于后端开发人员深入理解MP框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//1.名字中包含雨并且年龄小于40 name like '%雨%' and age<40
@Test
public void selectByWrapper(){
	QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
	//QueryWrapper<User> query=Wrappers<User>query();
	queryWrapper.like("name","雨").lt("age",40);
	List<User> userList=UserMapper.selectList(queryWrapper);
	userList.forEach(System.out:println);
}
//2.名字中包含雨,并且年龄大于等于20且小于等于40,并且email不为空
//name like"%雨%" and age between 20 and 40 and email is not null
@Test
public void selectByWrapper2(){
	QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
	queryWrapper.like("name","雨").between("age",20,40).isNotNull("email");
	List<User> userList=userMapper.selectList(queryWrapper);
	userList.forEach(System.out:println);
}
//3.名字为王姓或者年龄大于等于25,按照年龄降序排列,年龄相同按照id升序排列
// name like '王%' or age>=25 order by age desc,id asc
@Test
public void selectByWrapper3(){
QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
queryWrapper.likeRight("name","王").or().get("age","25").orderByDesc("age").orderByAsc("id");
List<User> userList=userMapper.selectList(queryWrapper);
userList.forEach(System.out:println);
}
//4.创建日期为2019年2月14日并且直属上级为名字为王姓
//data_format(create_time,'%Y-%m-%d') and manager_id in(select id from user where name like //'王%')
@Test
public void selectByWrapper4(){
QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
queryWrapper.apply("date_format(create_time,'%Y-%m-%d')={0}","2019-02-14").insql("manager_id","select id from user where name like '王%'");
List<User> userlist=userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}

// 5.名字为王姓并且(年龄小于40或邮箱不为空)
// name like '王%' and (age<40 or email is not null)
@Test
public void selectByWrapper5(){
	QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
	queryWrapper.likeRight('name',"王").and(wq->wq.it("age",40)).or.isNotNull("email");
	List<User> userList=userMapper.selectList(queryWrapper);
	userList.forEach(System.out::println);
}
//6.名字为王姓或者(年龄小于40并且年龄大于20并且邮箱不为空)
//name like '王%' or(age<40 and age>20 and email is not null)
@Test
public void selectByWrapper6(){
	QueryWrapper queryWrapper=new QueryWrapper<User>();
	queryWrapper.likeRight('name',"王").or((wq->wq.gt("age",40).and(wq->wq.lt("age",20)0.isNotNULL("email"));
	List<User> userlist=userMapper.selectList(queryWrapper);
	userList.forEach(System.out::println);
}
//7.(年龄小于40或邮箱不为空)并且名字为王姓
//(age<40 or email is not null)and name like '王%'
@Test
public void selectByWrapper7(){
	QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
	queryWrapper,nested(wq->wq.lt("age",40).or().isNotNull("email")),likeRight("name","王");
	List<User> userlist=userMapper.selectList(queryWrapper);
	userList.forEach(System.out::println);
}
//8.年龄为30,31,34,35 age in(30,31,34,35)
@Test
public void selectByWrapper8(){
QueryWrapper<User> queryWrapper=new QueryWrapper<USer>();
queryWrapper.in("age",Arrays.asList(30,31,34,35));
List<User> userList=userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//9.只返回满足条件的其中一条语句即可,limit 1
@Test
public void selectByWrapper9(){
	QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
	queryWrapper.in("age",Arrays.asList(30,31,34,35)).last("limit 1");
	List<User> userList=userMapper.selectList(queryWrapper);
	userList.forEach(System.out::println);
}

queryWrapper中方法中隐藏默认为true的condition
在这里插入图片描述

在这里插入图片描述

//11.按照直属上级分组,查询每组的平均年龄,最大年龄,最小年龄,
//并且只取年龄总和小于500的组
//select avg(age) avg_age,min(age) min_age,max(age) max_age from //user group by manager_id having sum(age)<500
@Test 
public void selectByWrapperMaps2(){
	QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
	queryWrapper.select("avg(age) avg_age","min(age) min_age","max(age)  max_age").groupBy("manage_id").having("sum(age)<{0}",500);
	List<Map<String Object> userList> =userMapper.selectMaps(queryWrapper);
	userList.forEach(System.out.println);

/查询结果只返回一列可以用/

@Test
public void selectByWrapperObjs(){
	QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
	queryWrapper.select("id","name").like("name","雨").lt("age",40);
	List<Object> userList=userMapper.selectObjts(queryWrapper);
	userList.forEach(System.out::println);
}

查询记录条数

@Test
public void selectByWrapperCount(){
	QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
	queryWrapper.like("name","雨").lt("age",40);
	Integer count = userMapper.selectCount(queryWrapper);
	System.out.println("总记录数"+count);
}

保证要查询出来的记录数只有一条,,多于一条会报错的,,只能查一条

@Test
public void selectByWrapperOne(){
	QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
	queryWrapper.like("name","刘红雨").lt("age",40);
	User user=userMapper.selectOne(queryWrapper);
	System.out.println(user);
}

mp提供的物理分页的两种返回形式,mybatisi是内存分页

@Test
public void selectPage(){
QueryWrapper<User> queryWrapper=new QueryWrapper<QueryWrapper>();
queryWrapper.ge("age",18);
Page<User> page=new Page<User>(1,2);
Ipage<User> ipage=userMapper.selectPage(page,queryWrapper);
System.out.println("总页数"+Ipage.getPages());
System.out.println("总记录数"+Ipage.getTotal());
List<User> userList=Ipage.getRecords();
userList.forEach(System.out::println);
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

update

@Test
public void updateById(){
	User user=new User();
	user.setId(1088248166370832385L);
	user.setAge(26);
	user.serEmail("wtf2@Baomidou.com");
	int rows=userMapper.updateById(user);
	System.out.println("影响记录数:"+rows);
}
@Test
public void updateByWrapper(){
	UpdateWrapper<User> updateWrapper=new UpdateWrapper<User>();
	updateWrapper.eq("name","李艺伟").eq("age",28);
	User user=new User();
	user.setEmail("lyw2019@Baomidou.com");
	user.setAge(29);
	int rows=userMapper.update(user,updateWrapper);
	System.out.println("影响记录数:"+rows);
}
@Test
public void updateByWrapperLambda(){
	LambdaUpdateWrapper<User> lambdaUpdate=Wrappers<User> lambdaUpdate();
	lambdaUpdate.eq(User::getName,"李以为").eq(User::getAge,30).set(User::getAge,31);
	int rows=UserMapper.update(null,lambdaUpdate);
	System.out.println("影响记录数",+rows);
}
@Test
public void deleteByMap(){
	Map<String,Object> columnMap=new HashMap<>();
	columnMap.put("name","向后");
	column.put("age",25);
	int rows=userMapper.deleteByMap(columnMap);
	System.out.println("删除条数",+rows);
}
@Test
public void deleteBatchIds(){
	int rows=userMapper.deleteBatchIds(Arrays.asList(1104220508505546754L,1104216373458722818L,
	1104215684997255169L));
	System.out.println("删除条数",+rows);
}
@Test
public void deleteByWrapper(){
	LambdaQueryWrapper<User> lambdaQuery=Wrapper.<User>lambdaQuery();
	lambdaQuery.eq(User::getAge,27).or().gt(User::getAge,41);
	int rows=userMapper.delete(lambdaQuery);
	System.out.println("删除条数"+rows);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值