zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    pyenv
    [20200724NOIP提高组模拟T3]终章-剑之魂
    [20200724NOIP提高组模拟T2]圣章-精灵使的魔法语
    [20200724NOIP提高组模拟T1]序章-弗兰德的秘密
    [20200723NOIP提高组模拟T1]同余
    [SDOI2008]仪仗队
    P3195 [HNOI2008]玩具装箱
    [20200722NOIP提高组模拟T4]词韵
    [20200721NOIP提高组模拟T3]最小代价
    [20200721NOIP提高组模拟T1]矩阵
  • 原文地址:https://www.cnblogs.com/jwen1994/p/14306466.html
Copyright © 2011-2022 走看看