• 第08章 MyBatisPlus持久化操作(二)


    序言

    1.内容介绍

    ​ 本章介绍了条件构造器的分类与组成元素,并且分别采用多种方式实现了信息的更新和删除操作,整体对于信息的持久层操作有了进一步的理解和深化。

    2.理论目标

    • 掌握条件标签分类
    • 掌握原生sql的语法结构
    • 掌握业务层自定义注入Mapper

    3.实践目标

    • 能使用UpdateWrapper API完成参数赋值,达到灵活的记录修改
    • 熟练进行多种方式更新操作,满足实际业务需求
    • 熟练进行多种方式删除操作,满足实际业务需求

    4.实践案例

    • 信息更新实战
    • 信息删除实战

    5.内容目录

    • 1.条件构造器详解
    • 2.信息更新操作
    • 3.信息删除操作

    第1节 条件构造器详解

    1. AbstractWrapper概述

    • 用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件
      • 注意: entity 生成的 where 条件与 使用各个 api 生成的 where 条件没有任何关联行为
    • QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类

    2. 条件标签分类

    标签方法案例等同sql
    eq、allEq、ne等于:eq(“name”, “老王”)
    不等于:ne(“name”, “老王”)
    name = '老王’
    name <> '老王
    gt、lt大于:gt(“age”, 18)
    小于:lt(“age”, 18)
    age > 18
    age < 18
    ge、le大于等于:ge(“age”, 18)
    小于等于:le(“age”, 18)
    age >= 18
    age <= 18
    between、notBetweenbetween(“age”, 18, 30)
    notBetween(“age”, 18, 30)
    age between 18 and 30
    age not between 18 and 30
    like、notLike、likeLeft、LikeRightlike(“name”, “王”)
    notLike(“name”, “王”)
    likeLeft(“name”, “王”)
    likeRight(“name”, “王”)
    name like '%王%'
    name not like '%王%'
    name like '%王’
    name like ‘王%’
    isNull 、isNotNullisNull(“name”)
    isNotNull(“name”)
    name is null
    name is not null
    in 、notIn、inSql、notInSqlin(“age”,{1,2,3})
    notIn(“age”,{1,2,3})
    inSql(“id”, “select id from table where id < 3”)
    notInSql(“id”, “select id from table where id < 3”)
    age in (1,2,3)
    age not in (1,2,3)
    id in (select id from table where id < 3)
    id not in (select id from table where id < 3)
    groupBy、havinggroupBy(“id”, “name”)
    having(“sum(age) > {0}”, 11)
    group by id,name
    having sum(age) > 11
    orderByAsc、orderByDesc、orderByorderByAsc(“id”, “name”)
    orderByDesc(“id”, “name”)
    orderBy(true, true, “id”, “name”)
    order by id ASC,name ASC
    order by id DESC,name DESC
    order by id ASC,name ASC
    or、and、exists、notExistseq(“id”,1).or().eq(“name”,“老王”)
    and(i -> i.eq(“name”, “李白”).ne(“status”, “活着”))
    exists(“select id from table where age = 1”)
    notExists(“select id from table where age = 1”)
    id = 1 or name = '老王’
    and (name = ‘李白’ and status <> ‘活着’)
    exists (select id from table where age = 1)
    not exists (select id from table where age = 1)

    第2节 信息更新操作

    • 更新的API方法
     
    

    // 根据 UpdateWrapper 条件,更新记录 需要设置sqlset boolean update(Wrapper updateWrapper); // 根据 whereWrapper 条件,更新记录 boolean update(T updateEntity, Wrapper whereWrapper); // 根据 ID 选择修改 boolean updateById(T entity); // 根据ID 批量更新 boolean updateBatchById(Collection entityList); // 根据ID 批量更新 boolean updateBatchById(Collection entityList, int batchSize);

    1. 基于ID进行单条记录更新

    • 采用方法updateById(T entity)

    1.1 编写IUserService.java

     
    

    //根据id进行更新操作 void updateUser(User user);

    1.2 编写UserServiceImpl.java

     
    

    @Override public void updateUser(User user) { updateById(user); }

    1.3 编写UserController.java

     
    

    //根据id进行用户更新 @RequestMapping("/updateById") public String testUpdateById(){ User user = new User(6,"李四",38,"lisinew@123.com"); userService.updateUser(user); return "更新1条记录成功!"; }

    1.4 执行,观察运行效果

    2. 基于条件进行更新

    • UpdateWrapper

      • 是AbstractWrapper的子类,主要便于进行更新操作时,封装参数。
    • 需求说明:基于用户ID实现用户信息的更新操作

    2.1 编写IUserService.java

     
    

    //根据条件更新指定id用户信息 void updateByUserId(int id,User user);

    2.2 编写UserServiceImpl.java

     
    

    @Override public void updateByUserId(int id, User user) { //封装条件参数 UpdateWrapper wrapper = new UpdateWrapper(); wrapper.eq("id",id); //执行更新 this.update(user,wrapper); }

    2.3 编写UserController.java

     
    

    //根据id进行条件更新 @RequestMapping("/updateById2") public String testUpdateById2(){ User user = new User("小明"); userService.updateByUserId(6,user); return "根据条件更新1条记录成功!"; }

    2.4 执行,测试运行结果

    3. 批量更新用户信息

    • 需求说明:批量更新123.com 邮箱为163.com
      • 采用原生的sql
    • 基于持久层UserMapper.java进行自定义

    3.1 编写UserMapper.java

     
    

    public interface UserMapper extends BaseMapper { //根据条件进行更新操作 @Update("${sql}") void updateUserByCondition(@Param("sql") String sql); }

    3.2 编写IUserService.java

     
    

    //根据原生sql进行更新操作 void updateUserByCondition(String oldEmailExt,String newEmailExt);

    3.3 编写UserServiceImpl.java

     
    

    @Autowired private UserMapper userMapper; @Override public void updateUserByCondition(String oldEmailExt,String newEmailExt) { String sql="update user set email=concat(substr(email,1,POSITION('@'in email)),'"+newEmailExt+"') " +"where email like '%@"+oldEmailExt+"'"; userMapper.updateUserByCondition(sql); }

    3.4 编写UserController.java

     
    

    //更新用户邮箱为指定的163.com邮箱 @RequestMapping("/updateEmail") public String testUpdateEmail(){ userService.updateUserByCondition("123.com","163.com"); return "更新用户邮箱成功!"; }

    3.5 执行,观察运行效果


    开始实验

    第3节 信息删除操作

    • 删除的API方法
     
    

    // 根据 entity 条件,删除记录 boolean remove(Wrapper queryWrapper); // 根据 ID 删除 boolean removeById(Serializable id); // 根据 columnMap 条件,删除记录 boolean removeByMap(Map columnMap); // 删除(根据ID 批量删除) boolean removeByIds(Collection idList);

    1. 基于ID进行单条记录删除

    • 采用方法removeById(Serializable id);

    1.1 编写IUserService.java

     
    

    //根据id删除单条记录 void delById(int id); //根据ids批量删除记录 void delByIds(List ids);

    1.2 编写UserServiceImpl.java

     
    

    @Override public void delById(int id) { removeById(id); } @Override public void delByIds(List ids) { removeByIds(ids); }

    1.3 编写UserController.java

     
    

    //根据id删除单记录 @RequestMapping("/del/{id}") public String testDelById(@PathVariable int id){ userService.delById(id); return "删除单条记录成功!"; } //根据id删除多记录 @RequestMapping("/del") public String testDelByIds(){ List ids = new ArrayList(); ids.add(1); ids.add(2); ids.add(5); userService.delByIds(ids); return "删除多条记录成功!"; }

    1.4 运行,观察执行结果

    2. 删除"赵姓"用户

    2.1 编写UserMapper.java

     
    

    //根据条件删除 @Delete("${sql}") void delByCondition(@Param("sql") String sql);

    2.2 编写IUserService.java

     
    

    //根据姓氏删除 void delByName(String name);

    2.3 编写UserServiceImpl.java

     
    

    @Override public void delByName(String name) { String sql="delete from user where name like '"+name+"%'"; userMapper.delByCondition(sql); }

    2.4 编写UserController.java

     
    

    //根据姓氏删除记录 @RequestMapping("/delByName") public String testDelByName(){ userService.delByName("赵"); return "删除‘赵姓’记录成功!"; }

    2.5 运行,观察执行结果

    开始实验

  • 相关阅读:
    第27集丨为人格补钙,让心灵吸氧
    MediaPlayer_Analyze-6-MediaCodec和ACodec
    Django安装与创建项目
    centos rpm方式安装jenkins
    06【MyBatis的配置文件】
    ROS编译 调用第三方动态库(xxx.so)
    关于在浏览器新标签页重新登录后旧页面没刷新导致一系列问题的解决方法
    Linux crontab定时任务设置
    Linux 查看目录和文件
    【小超嵌入式】C++图书管理系统详细分析
  • 原文地址:https://blog.csdn.net/a1234556667/article/details/126447108