【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();
原文地址:https://www.cnblogs.com/zllk/p/14044698.html