mybatis-plus入门

一.引入

1.创建springboot项目

2.mp的依赖

    
        com.baomidou
        mybatis-plus-boot-starter
        3.0.5
    

3.在 application.properties 配置文件中添加 MySQL 数据库的相关配置:

如果mysql8以上(spring boot 2.1)

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus

spring.datasource.username=root

spring.datasource.password=123456

如果mysql5

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/study
spring.datasource.username=root
spring.datasource.password=root

二.主键增加策略

https://www.cnblogs.com/haoxinyue/p/5208136.html

1.自增

2.uuid

3.reids

4.雪花算法

mp默认使用的就是雪花算法

@TableId(type = IdType.ID_WORKER)
private Long id;

如果主键是string类型

@TableId(type = IdType.ID_WORKER_STR)
private String id;

除此之外mp还包括:

AUTO(0),
NONE(1),
INPUT(2),
ID_WORKER(3),
UUID(4),
ID_WORKER_STR(5);

三.自动填充

项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。

我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作:

1.在实体类上面添加注解

@TableField(fill = FieldFill.INSERT) 
private Date createTime; 
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;

2.实现接口

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    private static final Logger logger = LoggerFactory.getLogger(MyMetaObjectHandler.class);

    @Override
    public void insertFill(MetaObject metaObject) {
        logger.info("新增开始");
        this.setFieldValByName("age",22,metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        logger.info("修改开始");
        this.setFieldValByName("age",33,metaObject);
    }
}

四.mp实现乐观锁

主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新

乐观锁的实现方式:

  • 1.取出数据时,获取当前数据的version
  • 2.更新数据时,带上这条version
  • 3.执行更新时, set version = newVersion where version = oldVersion
  • 4.如果version不对,则更新失败

1.类里面有version这个属性,表里面有version这个字段

2.类的version属性上面添加注解:

@Version

@TableField(fill=FieldFill.INSERT)

private intversion

3.元对象处理器接口添加version的insert默认值

@Override
public void insertFill(MetaObject metaObject) {
    this.setFieldValByName("version",1,metaObject);
}

4.在 MybatisPlusConfig 中注册 Bean

//乐观锁插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
    return new OptimisticLockerInterceptor();
}

注意事项:

支持的数据类型只有 int,Integer,long,Long,Date,Timestamp,LocalDateTime
整数类型下 newVersion = oldVersion + 1
newVersion 会回写到 entity 中
仅支持 updateById(id) 与 update(entity, wrapper) 方法
 在 update(entity, wrapper) 方法下, wrapper 不能复用!!!

五.crud

1.批量

//多个id批量查询
@Test
public void testSelectBatch() {
    List users = userMapper.selectBatchIds(Arrays.asList(1L, 2L, 3L));
    System.out.println(users);
}
//批量删除
@Test
public void testDeleteBatchIds() {

    int result = userMapper.deleteBatchIds(Arrays.asList(1,2));
    System.out.println(result);
}

2.分页查询

2.1.注册bean

/**
 * 分页插件
 */
@Bean
public PaginationInterceptor paginationInterceptor() {
    return new PaginationInterceptor();
}

2.2.使用

Page page = new Page<>(1,3);
//调用mp分页查询的方法
//调用mp分页查询过程中,底层封装
//把分页所有数据封装到page对象里面
userMapper.selectMapsPage(page, null);
//IPage> mapIPage = userMapper.selectMapsPage(page, null);
//通过page对象获取分页数据
System.out.println(page.getCurrent());//当前页
System.out.println(page.getRecords());//每页数据list集合
System.out.println(page.getSize());//每页显示记录数
System.out.println(page.getTotal()); //总记录数
System.out.println(page.getPages()); //总页数

System.out.println(page.hasNext()); //下一页
System.out.println(page.hasPrevious()); //上一页

六.物理删除和逻辑删除

  • 1.物理删除:真的删了
  • 2.逻辑删除:将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录

1.数据表里面增加delete字段,类里面增加delete属性

2.类上面添加注解

@TableLogic
private Integer deleted;

3.关于delete字段的值:

可以使用自动填充,也可以在数据表创建时设置默认值

可以在application.properties 加入配置

#mybatis-plus.global-config.db-config.logic-delete-value=1
###mybatis-plus.global-config.db-config.logic-not-delete-value=0

4.注册 Bean

//逻辑删除插件
@Bean
public ISqlInjector sqlInjector() {
    return new LogicSqlInjector();
}

 

你可能感兴趣的:(mybatis-plus入门)