在线课程项目(一)—— MybatisPlus入门

本文详细介绍了MybatisPlus的使用,包括入门demo、主键策略、自动填充、乐观锁、分页、逻辑删除等核心特性。在实践中,通过创建数据库、设置主键策略、使用自动填充功能,并解决初始化失败、乐观锁异常等问题,深入理解MybatisPlus的实用功能。
摘要由CSDN通过智能技术生成

2020最新版在线教育实战项目SpringBoot+SpringCloud+SpringSecurity+Redis…

准备

后端技术

springboot
springcloud
mybatisPlus
spring security
redis
maven
easy excel
jwt
oauth2

前端技术

vue
element-ui
axios
node.js

其他技术

阿里云oss
阿里云视频点播服务
阿里云短信服务
微信支付和denglu
docker
git
Jenkins

MybatisPlus

入门demo

  1. 创建数据库
  2. 创建spring项目 spring initializr
  3. 引入依赖

注意:
mp自动生成id值(19位),无需设置id值

主键策略

分表的情况

假设id分布为:
表1:1~10000
表2:10001~20000
表3:20001~30000

UUID:每次生成一个随机的唯一的值

redis实现:redis(单线程的)的原子操作INCR和INCRBY来实现

mp策略:snowflake算法(41bit毫秒,10bit机器id,其中5个数据中心,5个机器ID,12bit毫秒内的流水号,最后一个符号位,永远是0)

@TableId(type = IdType.AUTO)
private Long id;
  • AUTO:自动增长
  • ID_WORKER:mp自带策略,数字类型
  • ID_WORKER_STR:mp自带策略,String类型
  • INPUT:手动输入
  • NONE:无策略
  • UUID

自动填充

  1. 表增加两个字段 create_time(datetime)和update_time(datetime)
alter table user
	add create_time datetime null comment '创建时间';

alter table user
	add update_time datetime null comment '修改时间';
  1. 修改实体类
    private Date createTime;
    private Date updateTime;
  1. 手动设置时间
		user.setCreateTime(new Date());
        user.setUpdateTime(new Date());
        userMapper.insert(user);
  1. 可以用mp的方式(自动填充)实现3
    1. 在实习类的自动填充属性上加注解
    2. 编写源对象处理器MyMetaObjectHandler,实现元对象处理器接口MetaObjectHandler
	@TableField(fill = FieldFill.INSERT)
    private Date createTime;
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
   
    /**
     * 用mp实现添加操作,这个方法执行
     * @param metaObject 元数据
     */
    @Override
    public void insertFill(MetaObject metaObject) {
   
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }

    /**
     * 用mp实现修改操作,这个方法执行
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
   
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

乐观锁

如果不考虑事务隔离性,则会产生读问题:脏读、不可重复读、幻读,写问题:丢失更新问题。

乐观锁实现原理:
增加字段 version
修改成功 版本号+1

实现:

  1. 实体类添加version字段,并添加@Version注解
public class User {
   
	@Version
    private Integer version;
alter table user
	add version int null comment '版本号';
  1. 元对象处理器添加version的insert默认值
this.setFieldValByName("version",1,metaObject);
  1. 插件
@Configuration
@MapperScan("com.bookstore.demo1.mapper")
public class MyConfig {
   

    /**
     * 乐观锁插件
     * @return 返回乐观锁
     */
    @Bean
    public OptimisticLockerInnerInterceptor optimisticLockerInterceptor(){
   
        return new OptimisticLockerInnerInterceptor();
    }
}

  1. 要先查找后修改,否则version不会增加
User user = userService.selectById(7);
        user.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值