MyBatis-Plus(十一)Service的CRUD接口3:增删改操作

Service的CRUD接口3:增删改操作

1、新增数据

  1. save 方法可以将一个实体对象插入到对应的数据表中

注意:插入成功后,当前插入对象在数据库中的 id 会写回到该实体中。

@RestController
public class HelloController {
 
    @Autowired
    UserInfoService userInfoService;
 
    @RequestMapping("/test")
    public UserInfo test(){
        UserInfo user = new UserInfo();
        user.setUserName("hangge");
        user.setPassWord("12345678");
        user.setAge(100);
        userInfoService.save(user);
        return user;
    }
}
  1. saveBatch 方法可以批量插入数据
UserInfo user1 = new UserInfo();
user1.setUserName("hangge");
user1.setPassWord("12345678");
user1.setAge(100);
 
UserInfo user2 = new UserInfo();
user2.setUserName("航歌");
user2.setPassWord("111111");
user2.setAge(10);
 
UserInfo user3 = new UserInfo();
user3.setUserName("大力");
user3.setPassWord("0000");
user3.setAge(999);
 
//批量插入数据
userInfoService.saveBatch(Arrays.asList(user1, user2, user3));
  • saveBatch 方法还可以设置每个批次的插入数量:
UserInfo user1 = new UserInfo();
user1.setUserName("hangge");
user1.setPassWord("12345678");
user1.setAge(100);
 
UserInfo user2 = new UserInfo();
user2.setUserName("航歌");
user2.setPassWord("111111");
user2.setAge(10);
 
UserInfo user3 = new UserInfo();
user3.setUserName("大力");
user3.setPassWord("0000");
user3.setAge(999);
 
//批量插入数据(每批2条数据)
userInfoService.saveBatch(Arrays.asList(user1, user2, user3), 2);

2、修改数据

  1. updateById 方法根据实体对象中的 ID 进行修改:

注意:如果实体对象中某个属性为 null,不会更新该属性(即不会把对应的数据库字段值设置为 null

UserInfo userInfo = new UserInfo();
userInfo.setId(3);
userInfo.setUserName("hangge");
userInfo.setPassWord("123");
// 开始修改,返回执行结果
Boolean success = userInfoService.updateById(userInfo);
  1. updateBatchById 方法根据实体对象中的 ID 进行批量修改:
UserInfo user1 = new UserInfo();
user1.setId(1);
user1.setUserName("hangge");
user1.setAge(100);
 
UserInfo user2 = new UserInfo();
user2.setId(2);
user2.setUserName("航歌");
user2.setAge(10);
 
//批量修改数据
Boolean success = userInfoService.updateBatchById(Arrays.asList(user1, user2));
  • updateBatchById 方法还可以设置每个批次的修改的数量:
UserInfo user1 = new UserInfo();
user1.setId(1);
user1.setUserName("hangge");
user1.setAge(100);
 
UserInfo user2 = new UserInfo();
user2.setId(2);
user2.setUserName("航歌");
user2.setAge(10);
 
//批量修改数据
Boolean success = userInfoService.updateBatchById(Arrays.asList(user1, user2),2);
  1. update 方法可以使用实体对象封装操作类进行更新操作:
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40);
// 将满足条件的记录密码都设置为8888
UserInfo userInfo = new UserInfo();
userInfo.setPassWord("8888");
// 开始修改,返回执行结果
Boolean success = userInfoService.update(userInfo, updateWrapper);
  • 我们也可以通过 updateWrapperset 方法直接设置字段值,比如下面除了将密码设置为 8888 外,还将年龄设置为 null
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40)
        .set(UserInfo::getPassWord, "8888")
        .set(UserInfo::getAge, null);
// 开始修改
Boolean success = userInfoService.update(updateWrapper);
 
 
/*********** 二者可以结合使用的,下面效果等效于上面的 ****************/
 
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40)
        .set(UserInfo::getAge, null);
// 将满足条件的记录密码都设置为8888
UserInfo userInfo = new UserInfo();
userInfo.setPassWord("8888");
// 开始修改
Boolean success = userInfoService.update(userInfo, updateWrapper);
  • 而也通过 updateWrappersetSql 方法可以直接设置 set 部分的 sql,下面的效果同上面是一样的:
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40)
        .setSql("pass_word = '8888'")
        .setSql("age = null");
// 开始修改
Boolean success = userInfoService.update( updateWrapper);
 
/*********** 二者可以结合使用的,下面效果等效于上面的 ****************/
 
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40)
        .setSql("age = null");
// 将满足条件的记录密码都设置为8888
UserInfo userInfo = new UserInfo();
userInfo.setPassWord("8888");
// 开始修改
Boolean success = userInfoService.update(userInfo, updateWrapper);

3、新增或修改数据

  1. saveOrUpdate 会先判断实体类是否包含主键 ID,如果有的话则执行更新操作,没有的话则执行新增操作:
UserInfo user1 = new UserInfo();
user1.setId(1);
user1.setUserName("hangge");
user1.setAge(100);
// 由于user1设置了主键id,则执行更新操作
userInfoService.saveOrUpdate(user1);
 
UserInfo user2 = new UserInfo();
user2.setUserName("hangge");
user2.setAge(100);
// 由于user2没有设置主键id,则执行新增操作
userInfoService.saveOrUpdate(user1);

  1. saveOrUpdateBatch 方法可以执行批量的新增或修改操作:
// 由于user1设置了主键id,则执行更新操作
UserInfo user1 = new UserInfo();
user1.setId(1);
user1.setUserName("hangge");
user1.setAge(100);
 
// 由于user2没有设置主键id,则执行新增操作
UserInfo user2 = new UserInfo();
user2.setUserName("hangge");
user2.setAge(100);
 
// 开始执行批量新增或修改操作
userInfoService.saveOrUpdateBatch(Arrays.asList(user1, user2));

  • saveOrUpdateBatch 方法还可以设置每个批次的新增修改的数量:
// 由于user1设置了主键id,则执行更新操作
UserInfo user1 = new UserInfo();
user1.setId(1);
user1.setUserName("hangge");
user1.setAge(100);
 
// 由于user2没有设置主键id,则执行新增操作
UserInfo user2 = new UserInfo();
user2.setUserName("hangge");
user2.setAge(100);
 
// 开始执行批量新增或修改操作(每批2条数据)
userInfoService.saveOrUpdateBatch(Arrays.asList(user1, user2), 2);

4、删除数据

  1. removeById 方法可以根据 id 删除一条记录:
// 返回删除结果
Boolean success = userInfoService.removeById(4);

  1. removeByIds 方法根据 id 批量删除:
// 返回删除结果
Boolean success = userInfoService.removeByIds(Arrays.asList(4,5,6));

  1. removeByMap 方法通过 Map 封装的条件删除记录:

注意map 写的是数据表中的列名,而非实体类的属性名。比如属性名为 userName,数据表中字段为 user_name,这里应该写的是 user_name

Map<String,Object> columnMap = new HashMap<>();
columnMap.put("user_name", "hangge");
columnMap.put("age", 22);
// 返回删除结果
Boolean success = userInfoService.removeByMap(columnMap);

  1. remove 方法使用查询构造器,删除记录:
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40);
// 返回删除结果
Boolean success = userInfoService.remove(queryWrapper);

点击跳转至原文地址

--------------最后感谢大家的阅读,愿大家技术越来越流弊!--------------

在这里插入图片描述

--------------也希望大家给我点支持,谢谢各位大佬了!!!--------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值