mybatis plus 快速入门
环境搭建
导入mybatis plus 依赖,注意,导入mybatis plus依赖之后,就不要再导入mybatis 的依赖,可能会有依赖冲突
建 spring boot 工程
导入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
一、基本的crud
1)写对应的实体类
User
2)mapper接口,继承一个父类即可
3)继承父类之后,就可以直接调用服类的方法
查询所有
按照条件查询
1)根据id查询,查询一个
2)根据id查询,查询多个
3)根据某个条件或几个条件查询,查询
插入
1)简单的插入数据
插入过程分析
1)插入之前是没有id的,插入之后就有id了
2)id的生成策略
默认是 雪花算法,可以保证id 是全局唯一的,并且和UUID不同,雪花算法的id是数字,数字可以是有序的
可以通过注解的方式,控制主键的正常策略
有如下几种生成策略,默认是 ID_WORKER
-
AUTO 自增的方式
-
NONE 没有主键
-
INPUT 每次插入需要带上主键,不会自动生成
-
ID_WORKER 雪花算法,生成的主键是Long 类型的数据
-
UUID通过UUID·的方式 ID_WORKER_STR ID_WORKER的字符串表示,生成的主键是String 类型的数据
修改
修改,需要传入一个对象
修改的时候,可以应用乐观锁的机制
加一个 version 字段
给配置类增加一个 bean
/**
* 乐观锁插件 针对字段 version
* @return
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
修改 id 为 4 的name
修改之后,version 值变成了1
以上测试的是正常的情况
下面模拟高并发的情况
下面的执行结果说明
user.setName("updateName222222");
userMapper.updateById(user);
这两句是执行成功的
最终的结果
删除
逻辑删除
需要增加一个字段 deleted,配上对应的注解
增加 yml 配置
上面对的配置 表示 逻辑删除之后,deleted 字段变成 1;没有删除之前,deleted 字段的值是 0
(可以设置 deleted 字段的默认值就是 0)
低版本的mybatis plus 逻辑删除需要给配置类一个 bean
/**
* 逻辑删除 针对字段 deleted
* @return
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
删除之前的数据
删除之后的数据
注意:
笔者一开始用的 插件的版本是 3.0.5
在做逻辑删除的时候,需要在 配置类里面加上面的 bean
换了最新的版本(3.3.2)之后,只需要加上注解即可,不需要 在配置类里面添加拦截器的配置也是可以正常的逻辑删除的
二、分页操作
增加一个配置bean
测试代码
三、自动填充功能
场景:阿里开发规定,每张表 需要有 创建时间字段和修改时间字段,这两个字段基本上是自动的填充
1)通过数据库设置字段默认值的方式
dateTime CURRENT_TIMESTAMP
2)通过代码填充的方式
3)通过插入和修改时,带上字段 ,并设置时间
在mybatis 的xml 中
NOW()函数以`'YYYY-MM-DD HH:MM:SS’返回当前的日期时间,可以直接存到DATETIME字段中。
CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。
CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。
4)mybatis plus 可以自动的填充
以上注解的含义如下
FieldFill 可以有 4 个值
INSERT 表示 该字段在插入的时候,填充
UPDATE 表示 该字段在修改的时候,填充
INSERT_UPDATE 表示 该字段在修改的时候,填充;在插入的时候,也填充
所以,上面实体类的配置的含义是
createTime 是在记录产生的时候填充,填充的是 插入记录的时间,吻合需求
updateTime 在插入记录的时候,也填充插入记录时间,就是给了一个默认的初始值,在记录被修改的时候,updateTime 会更新成修改记录的时间