MybatisPlus
条件构造器
基于QueryWrapper的查询
MybatisPlus中写好的QueryWrapper方法省去了编写复杂sql语句的繁琐,直接把各种条件集成为对应的方法
需求:
1.查询出名字中带o的,存款大于等于10000的人的id、username、info、balance字段
2.更新用户名为jack的用户余额为2000
上面是传统的sql语句,我们来看一下用QueryWrapper怎么写
首先我们在test测试类中写语句
创建一个QueryWrapper对象用链式编程来查找出名字中带o的,存款大于等于10000的人的id、username、info、balance,用selectList方法来返回一个集合在进行foreach遍历打印
@Test
void testQueryWrapper(){
//1.构建查询条件
QueryWrapper<User> wrapper = new QueryWrapper<User>()
.select("id", "username", "info", "balance")
.like("username", "o")
.ge("balance", 1000);
//2.查询
List<User> users = userMapper.selectList(wrapper);
//3.遍历打印
users.forEach(System.out::println);
}
下面让我们再来看更新语句
@Test
void testUpdateByQueryWrapper(){
//1.要更新的数据
User user = new User();
user.setBalance(2000);
//2.更新的条件
QueryWrapper<User> wrapper = new QueryWrapper<User>()
.eq("username", "jack");
//3.执行更新
userMapper.update(user,wrapper);
}
我们要注意的是QueryWrapper起到了一个更新条件的作用,在执行更新语句的时候要把要更新的数据以及wrapper条件传进去才可以更新成功
基于UpdateWrapper的更新:
需求:更新id为1,2,4的用户余额,扣两百
传统sql语句:
UPDATE user
SET balance = balance -200
WHERE id in (1,2,4)
基于UpdateWrapper
@Test
void testUpdateWrapper(){
List<Long> ids = List.of(1L, 2L, 4L);
UpdateWrapper<User> wrapper = new UpdateWrapper<User>()
.setSql("balance = balance -200")
.in("id",ids);
userMapper.update(null,wrapper);
}
先声明一个list集合来存储要更新的id的值,再用UpdateWrapper声明更新语句,setSql方法用来自己写sql语句再使用update更新语句,更新数据库的值。
同理增删改查语句都可以用wrapper来实现,非常方便。
LambdaQueryWrapper
上面的wrapper语句都是写死的,属于硬编码,LambdaWrapper就是用来解决这个问题额
@Test
void testLambdaQueryWrapper(){
//1.构建查询条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
.select(User::getId,User::getUsername,User::getBalance,User::getInfo)
.like(User::getUsername, "o")
.ge(User::getBalance, 1000);
//2.查询
List<User> users = userMapper.selectList(wrapper);
//3.遍历打印
users.forEach(System.out::println);
}
LambdaQueryWrapper与QueryWrapper的区别就是select语句穿的不是写死的值,而是一个function函数用来get到id、username等字段,实际上还是获取的一个column字段,但是避免了硬编码问题
所以更加推荐LambdaQueryWrapper。
自定义SQL
需求:将id在指定范围的用户(例如1、2、4)的余额扣减指定值
我们可以利用MybatisPlus的Wrapper来构建复杂的where条件,然会自己定义SQL语句剩下的部分
1.基于Wrapper构建where条件
@Test
void testCustomeSqlUpdate(){
//1.更新条件
List<Long> ids = List.of(1L, 2L, 4L);
int amount = 200;
//2.定义条件
UpdateWrapper<User> wrapper = new UpdateWrapper<User>().in("id",ids);
//3.调用自定义sql方法
userMapper.updateBalanceByIds(wrapper,amount);
}
IService接口:
MybatisPlus很贴心的为我们提供了IService接口以及对应的ServiceImpl实现来,里面包含了大量的增删改查的方法,继承关系如下图所示:
标签:语句,QueryWrapper,小宋,SpringCloud,day01,wrapper,更新,id,User From: https://blog.csdn.net/qq_50684356/article/details/139544074