Mybatis-Plus零碎知识

483 阅读2分钟

1.主键策略

@TabelId(type = IdType.ASSIGN_ID)

  • ASSIGN_ID采用的推特的雪花算法,随机生成的一个19位的ID
  • AUTO采用的自增策略

2.自动填充

@TableField(FieldFill.INSERT)

  • 创建时间可以用这个

@TableField(FieldFill.INSERT_UPDATE)

  • 修改时间用这个

在类上标注@Compoent

使用方法:

  • 创建一个handler的包,创建一个类并实现MetaObjectHandler接口

  • 接口中有两个方法

    • insertFill(MetaObject metaObject)在添加操作时,调用此方法

      • 调用方法this.setFieldValByName("createTime", new Date(), metaObject)
      • 调用方法this.setFieldValByName("updateTime", new Date(), metaObject)
    • update(MetaObject metaObject)在执行修改操作时,调用此方法

      • 调用方法this.setFieldValByName("updateTime", new Date(), metaObject)

3.乐观锁

添加字段Version字段,默认为1

  • 第一个session

比较当前数据修改版本和数据库版本是否一致

操作完成之后,数据版本号从1更新为2

  • 第二个session

获取到不正确的版本号,就会操作失败

3.1代码实现

  • 表里添加字段作为版本号,对应实体类增加属性

  • 在实体类的属性上增加一个@Vesion和@TableFeild(FieldFill.INSERT)

  • 在接口的insertFill方法中再次增加

    • this.setFieldValByName("version", 1, metaObject)
  • 在配置包中增加配置类,加上@Configuration和@MapperScan(“”)

@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
    return new OptimisticLockerInterceptor();
}

4.查询操作

4.1 多个ID的批量查询

List list = Mapper.selectBatchIds(Arrays.asList(1,2,3))
//按照ID为1,2,3的ID查询

4.2按照条件查询

new HashMap();
map.put("name","fq")
map.put("age",20)
Mapper.selectByMap(map);

4.3 分页查询

添加插件

编写分页代码

  • 插件Page对象,传入两个参数(当前页, 每页记录页)
  • 调用mp方法实现分页
Page<Fq> page = new Page(1,3);
Page<Fq> fqPage = Mapper.selectPage(page,null);

long Pages = fqPage.getPages();//总页数
long current = fqPage.getcurrent();//当前页
List<Fq> recodes = fqPage.getRecords();//查询数据集合
Long total = fqPage.getTotal();//总记录数
boolean hasNext = fqPage.hasNext();//是否有下一页
boolean hasPrevious = fqPage.hasPrevious();//查询是否有上一页

5.删除操作

5.1 逻辑删除

在表添加字段,作为逻辑删除标志,每次删除时候,修改标志位

  • 0表示没有删除
  • 1表示逻辑删除

5.2 逻辑删除操作

  • 在表中添加字段delete
  • 在实体类中添加属性delete,并添加上@TableLogic与@TableFeild(fill = FieldFill.INSERT)
  • 在Hanlder中的insertFill中添加初始值this.setFieldValByName("delete", 0, metaObject)

底层使用的是update方法