一、概述
通过构建各种复杂的where条件,满足日常开发中的所有需求
二、QueryWrapper
@Test
void testQueryWrapper() {
QueryWrapper<User> wrapper = new QueryWrapper<User>().like("username", "张");
List<User> users = userService.list(wrapper);
System.out.println(users);
}
三、LambdaQueryWrapper
@Test
void testLambdaQueryWrapper() {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
.like(User::getUsername, "张");
List<User> users = userService.list(wrapper);
System.out.println(users);
}
四、UpdateWrapper
@Test
void testUpdateWrapper() {
// 要修改的数据
User user = User.builder().username("张三").build();
// where查询条件
UpdateWrapper<User> wrapper = new UpdateWrapper<User>().eq("id", 1);
userService.update(user, wrapper);
}
五、LambdaUpdateWrapper
@Test
void testLambdaUpdateWrapper() {
// 要修改的数据
User user = User.builder().username("张三**").build();
// where查询条件
LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<User>().eq(User::getId, 1);
userService.update(user, wrapper);
}
五、自定义SQL
将ID为 1,2,3的用户金额减 10
测试类
@Test
void testCustomSQL() {
List<Integer> ids = List.of(1, 2, 3);
Integer amount = 10;
LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<User>().in(User::getId, ids);
userService.updateVagueByIds(wrapper, amount);
}
Service接口
public interface IUserService extends IService<User> {
/**
* 自定义SQL修改用户数据
* @param wrapper
*/
void updateVagueByIds(LambdaUpdateWrapper<User> wrapper, Integer amount);
}
ServiceImp实现类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
/**
* 自定义SQL修改用户数据
*
* @param wrapper
* @param amount
*/
@Override
public void updateVagueByIds(LambdaUpdateWrapper<User> wrapper, Integer amount) {
this.baseMapper.updateVagueByIds(wrapper, amount);
}
}
注意:这里
ServiceImpl
已经指定了泛型为UserMapper
,所以我们在调用Mapper接口的时候直接使用this.baseMapper
即可,不需要再依赖注入。
Mapper接口
@Mapper
public interface UserMapper extends BaseMapper<User> {
void updateVagueByIds(@Param(Constants.WRAPPER) LambdaUpdateWrapper<User> wrapper, @Param("amount") Integer amount);
}
注意:这里的wrpper条件构造器需要增加
@Param(Constants.WRAPPER)指定ew
表明这个参数是一个条件构造器。
XML文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ming.mapper.UserMapper">
<update id="updateVagueByIds">
update user set balance = balance - #{amount} ${ew.customSqlSegment}
</update>
</mapper>
注意:这里使用条件构造器的方法为
${ew.customSqlSegment}
,不需要增加where语句,直接再SQL条件的后面进行增加