Mybatis-Plus基础之Mapper增删改

发布时间:2023年12月25日

一、普通增删改

普通新增

插入一条记录。

int insert(T entity);

参数 entity 是实体对象,即要插入的数据内容。

普通删除

根据 entity 条件,删除记录
int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
  • 参数 wrapper 是实体对象封装操作类(可以为 null),用以表示删除条件。
  • 参数 wrapper 可以为 null,表示删除所有。
根据 ID 批量删除
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
  • 参数 idList 是主键 ID 列表,表示待删除的多条数据的主键 ID 。
  • 参数 idList 不能为 null,也不能是 empty 。
根据 ID 删除
int deleteById(Serializable id);
  • 参数 id 是主键 ID 。
根据 columnMap 条件,删除记录
int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
  • 参数 columnMap 是表字段 map 对象

普通修改

根据 whereWrapper 条件,更新记录
int update(@Param(Constants.ENTITY) T updateEntity, 
           @Param(Constants.WRAPPER) Wrapper<T> whereWrapper);
  • 参数 entity:实体对象 ( set 条件值,可为 null )
  • 参数 updateWrapper:实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
根据 ID 修改
int updateById(@Param(Constants.ENTITY) T entity);
  • 参数 entity:实体对象(set 条件值,可为 null)

二、insert ID 主键回填

insert 后主键会自动 set 到实体的 ID 字段,所以你只需要 getId() 就好。


三、条件删除:使用 Wrapper

预期执行的 SQL 如下:

DELETE FROM  department WHERE  name = 'test'; 

使用 Wrapper 对应 Java 中的实现如下:

Wrapper<Department> wrapper = new QueryWrapper<Department>().eq("name", "test");
departmentDao.delete(wrapper);

四、条件修改:使用 Wrapper

预期执行的 SQL 如下:

update
    department
set name     = 'hello-new',
    location = 'world'
where 
    name = 'hello';

使用 Wrapper 对应 Java 中的实现如下:

Department department = new Department(null, "hello-new", "world");
Wrapper<Department> wrapper = new QueryWrapper<Department>()
        .eq("name", "hello");

departmentDao.update(department, wrapper);

注意
这里的 null 值表示保持原址不变。


五、插入或更新的字段有空字符串或 null

方式有 3 种。最新、也是最灵活的是使用 UpdateWrapper 。它需要 mybatis-pulus 在 3.0+ 。

使用以下方法来进行更新或插入操作:

//updateAllColumnById(entity) // 全部字段更新: 3.0已经移除
mapper.update(
   new User().setName("mp").setAge(3), // 非 null 的设值放这里
   Wrappers.<User>lambdaUpdate()
           .set(User::getEmail, null)  // null 的设置放这里
           .eq(User::getId, 2)        // 再加上查询条件
);

也可以参考下面这种写法:

mapper.update(
    null,
    Wrappers.<User>lambdaUpdate()
       .set(User::getAge, 3)
       .set(User::getName, "mp")
       .set(User::getEmail, null) //把email设置成null
       .eq(User::getId, 2)
);

六、逻辑删除

  • 步骤 1:配置 com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig。

    mybatis-plus:
      global-config:
        db-config:
          logic-delete-field: flag  ### 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤 2)
          logic-delete-value: 1 ### 逻辑已删除值(默认为 1)
          logic-not-delete-value: 0 ### 逻辑未删除值(默认为 0)
    
  • 步骤 2:加上注解。

    @TableLogic
    private Integer deleted;
    

七、乐观锁

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
    return interceptor;
}

在实体类的字段上加上 @Version 注解:

@Version
private Integer version;

注意
在使用 MybatisPlus 乐观锁功能的时候,记得在你的 update 功能中,为你的 实体类的 version 字段赋值。这样,你才能在 MP 执行的 SQL 语句中看到乐观锁逻辑。

文章来源:https://blog.csdn.net/m0_73393501/article/details/135196062
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。