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);
    }
  • 相关阅读:
    C++ Builder编写WinForm Post数据至Web服务器并得到返回数据
    东方网点网吧电影下载url
    自己写的常用jquery扩展函数
    给IT新人的15点建议:苦逼程序员的辛酸反省与总结
    hdu 2152 Fruit (母函数)
    母函数
    hdu 1709 The Balance (母函数)
    hdu 1171 Big Event in HDU (母函数)
    hdu 1085 Holding BinLaden Captive! (母函数)
    hdu 1398 Square Coins (母函数)
  • 原文地址:https://www.cnblogs.com/jwen1994/p/14306466.html
Copyright © 2011-2022 走看看