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

6 篇文章 0 订阅
6 篇文章 0 订阅

序言

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<T> updateWrapper); // 根据 whereWrapper 条件,更新记录 boolean update(T updateEntity, Wrapper<T> whereWrapper); // 根据 ID 选择修改 boolean updateById(T entity); // 根据ID 批量更新 boolean updateBatchById(Collection<T> entityList); // 根据ID 批量更新 boolean updateBatchById(Collection<T> 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<User> wrapper = new UpdateWrapper<User>(); 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<User> { //根据条件进行更新操作 @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<T> queryWrapper); // 根据 ID 删除 boolean removeById(Serializable id); // 根据 columnMap 条件,删除记录 boolean removeByMap(Map<String, Object> columnMap); // 删除(根据ID 批量删除) boolean removeByIds(Collection<? extends Serializable> idList);

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

  • 采用方法removeById(Serializable id);

1.1 编写IUserService.java

 

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

1.2 编写UserServiceImpl.java

 

@Override public void delById(int id) { removeById(id); } @Override public void delByIds(List<Integer> 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<Integer> ids = new ArrayList<Integer>(); 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 运行,观察执行结果

开始实验

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撸码的xiao摩羯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值