• Mybatis Plus 更新


    一、根据id更新

    @Test
    public void updateById() {
        User user = new User();
        user.setId(1088248166370832385L);
        user.setAge(26);
        user.setEmail("wtf2@baomidou.com");
        int rows = userMapper.updateById(user);
        System.out.println("影响记录数:" + rows);
    }

    控制台输出:

    DEBUG==>  Preparing: UPDATE user SET age=?, email=? WHERE id=? 
    DEBUG==> Parameters: 26(Integer), wtf2@baomidou.com(String), 1088248166370832385(Long)
    DEBUG<==    Updates: 1
    影响记录数:1

    二、以条件构造器作为参数的更新方法

    @Test
    public void updateByWrapper() {
        UpdateWrapper wrapper = new UpdateWrapper();
        wrapper.eq("name", "李艺伟");
        wrapper.eq("age", "28");
        User user = new User();
        user.setEmail("lyw2021@baomidou.com");
        user.setAge(29);
        int rows = userMapper.update(user, wrapper);
        System.out.println("影响记录数:" + rows);
    }

    控制台输出:

    DEBUG==>  Preparing: UPDATE user SET age=?, email=? WHERE name = ? AND age = ? 
    DEBUG==> Parameters: 29(Integer), lyw2021@baomidou.com(String), 李艺伟(String), 28(String)
    DEBUG<==    Updates: 1
    影响记录数:1

    UpdateWrapper 还有重载方法,传入实体对象,实体对象不为空的属性当作条件

    @Test
    public void updateByWrapper2() {
        User whereUser = new User();
        whereUser.setName("李艺伟");
    
        UpdateWrapper wrapper = new UpdateWrapper(whereUser);
        wrapper.eq("name", "李艺伟");
        wrapper.eq("age", "28");
        User user = new User();
        user.setEmail("lyw2021@baomidou.com");
        user.setAge(29);
        int rows = userMapper.update(user, wrapper);
        System.out.println("影响记录数:" + rows);
    }

    控制台输出:实体对象会和 wrapper.eq 设置的条件合并

    DEBUG==>  Preparing: UPDATE user SET age=?, email=? WHERE name=? AND age=? AND name = ? AND age = ? 
    DEBUG==> Parameters: 29(Integer), lyw2021@baomidou.com(String), 李艺伟(String), 0(Integer), 李艺伟(String), 28(String)
    DEBUG<==    Updates: 0
    影响记录数:0

    注意这里 age 条件出现了两次,这不是bug这是因为定义属性类型的方式有区别

    • private int age:age默认是0,也就是不为空
    • private Integer age:age默认是null

    三、条件构造器中set方法使用

    我们也不必创建对象来设置语句的set所需的值,UpdateWrapper 提供了 set() 方法

    @Test
    public void updateByWrapper3() {
        UpdateWrapper wrapper = new UpdateWrapper();
        wrapper.eq("name", "李艺伟");
        wrapper.eq("age", 29);
        wrapper.set("age", 30);
        
        int rows = userMapper.update(null, wrapper);
        System.out.println("影响记录数:" + rows);
    }

    LambdaWrapper

    @Test
    public void updateByWrapperLambda() {
        LambdaUpdateWrapper<User> wrapper = Wrappers.lambdaUpdate();
        wrapper.eq(User::getName, "李艺伟").eq(User::getAge, 30)
                .set(User::getAge, 30);
        int rows = userMapper.update(null, wrapper);
        System.out.println("影响记录数:" + rows);
    }

    LambdaUpdateChainWrapper

    @Test
    public void updateByWrapperLambdaChain() {
        boolean flag = new LambdaUpdateChainWrapper<>(userMapper).eq(User::getName, "李艺伟").eq(User::getAge, 30)
                .set(User::getAge, 30).update();
        System.out.println("是否修改成功:" + flag);
    }
  • 相关阅读:
    SDUT OJ 2862 勾股定理
    交换排序(java)
    boost::asio的http client应用笔记
    Yii Framework2.0开发教程(1)配置环境及第一个应用HelloWorld
    排序
    python爬虫(一)抓取 色影无忌图片
    hdu3377之简单路径求最值
    hdu 4406 费用流
    1次查询优化的过程
    mysql中的group_concat函数的用法
  • 原文地址:https://www.cnblogs.com/jwen1994/p/14306466.html
Copyright © 2020-2023  润新知