直接上代码。
@SpringBootTest
public class MpUpateTest {
@Autowired
UserService userService;
@Test
public void test1() {
//1.实体用updateById更新 发现age设为null也不更新
User user = new User();
user.setId(1);
user.setName("bb");
user.setAge(null);
userService.updateById(user);
}
@Test
public void test2() {
//2.实体用saveOrUpdate更新 发现age设为null也不更新
User user = new User();
user.setId(1);
user.setName("cc");
user.setAge(null);
userService.saveOrUpdate(user);
}
@Test
public void test3() {
//3.wrapper用saveOrUpdate更新 age被成功设置为了null
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.eq("id", 1);
wrapper.set("name", "dd");
wrapper.set("age", null);
userService.update(wrapper);
}
@Test
public void test4() {
//4.LambdaUpdateWrapper用update更新 age被成功设置为了null
LambdaUpdateWrapper<User> wrapper = Wrappers.lambdaUpdate(User.class);
wrapper.eq(User::getId, 1);
wrapper.set(User::getName, "ee");
wrapper.set(User::getAge, null);
userService.update(wrapper);
}
}
最后做个总结。
1.当我们想要更新部分字段的时候,上述更新方法都没啥问题,只要我们不显式的设置某值为null,那就不为更新某些字段,不用担心大规模的字段为null的情况。
2.如果我们就是要设置某值为null,则只能使用wrapper 的方式,上面两种方式不会起效果。