【Mybatis-Plus学习笔记(四)】更新
本系列博客其他文章请点击下方链接查看
【Mybatis-Plus学习笔记】目录
根据id更新
MP中的updateById需要传入一个实体(必须有ID),不为null的值都会被更改,返回影响的行数。如下:
User user = new User();
user.setId(1087982257332887553L);
user.setName("王十蛋");
int row = userMapper.updateById(user);
System.out.println("影响的行数:" + row);
相当于
''DEBUG==> Preparing: UPDATE user SET name=?, age=? WHERE id=?
''DEBUG==> Parameters: 王十蛋(String), 0(Integer), 1087982257332887553(Long)
以条件构造器作为参数的更新方法
UpdateWrapper<User> queryWrapper = new UpdateWrapper<>();
queryWrapper.likeRight("name", "王").ge("age", 25);
User user = new User();
user.setId(1087982257332887553L);
user.setName("王九蛋");
user.setAge(15);
int row = userMapper.update(user, queryWrapper);
System.out.println("影响的行数:" + row);
相当于
''DEBUG==> Preparing: UPDATE user SET name=?, age=? WHERE name LIKE ? AND age >= ?
''DEBUG==> Parameters: 王九蛋(String), 15(Integer), 王%(String), 25(Integer)
和Select语句一样,UpdateWrapper也有一个带有实体参数的构造器,这个实体中不为null的参数会出现在Where子句中。非常简单就不举例子了。
条件构造器中set方法使用
每次更新都要跟新实体非常的麻烦,可以直接在构造器后使用set方法来实现更改。如下
UpdateWrapper<User> queryWrapper = new UpdateWrapper<>();
queryWrapper.likeRight("name", "王").ge("age", 25).set("age", 26);
Lambda条件构造器
更新也有 Lambda条件构造器,如下:
LambdaUpdateWrapper<User> lambdaUpdateWrapper = Wrappers.<User>lambdaUpdate();
lambdaUpdateWrapper.eq(User::getName, "李艺伟").eq(User::getAge, 28).set(User::getAge, 30);
int row = userMapper.update(null, lambdaUpdateWrapper);
System.out.println("影响的行数:" + row);
相当于
''DEBUG==> Preparing: UPDATE user SET age=? WHERE name = ? AND age = ?
''DEBUG==> Parameters: 30(Integer), 李艺伟(String), 28(Integer)
和查询一样,更新也有一个链式Lambda条件构造器,如下:
boolean update = new LambdaUpdateChainWrapper<User>(userMapper)
.eq(User::getName, "李艺伟").eq(User::getAge, 28).set(User::getAge, 30)
.update();