Mybatis的插件就是对Exceutor、StatementHandler、ParameterHandler、ResultSetHandler这四个接口上的方法进行拦截,利用JDK的动态代理对象的方法,从而执行自己编写的拦截逻辑。
Exceutor:MyBatis的内部执行器,它负责调用StatementHandler操作数据库,并把结果集通过ResultSetHandler进行自动映射
StatementHandler:MyBatis直接让数据库执行sql脚本的对象
ParameterHandler:MyBatis实现sql入参设置的对象
ResultSetHandler:Mybatis把ResultSet集合映射成POJO的接口对象
MyBatis-Plus的常用插件:
MyBatis-Plus依据MaBaties插件机制,为我们提供了一些开发中常用插件
分页插件:Paginationlnnerinterceptor
防止全表更新与删除:BlockAttackinnerinterceptor
乐观锁:OptimisticLockerInnerInterceptor
这些插件都实现了InnerInterceptor接口
插件注册(在启动类里面、或者配置类里面0):
public class Springdemo8Application {
public static void main(String[] args) {
SpringApplication.run(Springdemo8Application.class, args);
}
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
//分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
//防止全表更新与删除插件
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
return interceptor;
}
}
乐观锁插件:
修改数据库的数据时,为了防止同时被其他人修改数据,最好的办法就是对该数据加锁,以防止并发。锁的设计分为乐观锁和悲观锁:
悲观锁:悲观锁的设计对数据是否被外界持悲观态度,就是默认数据会被修改,所以在整个数据处理的过程中,数据都会处于锁定的状态。悲观锁的实现依靠数据库提供的锁机制
乐观锁:乐观锁的设计对数据是否被修改持乐观态度,在操作数据的过程中没有加锁,别的用户也可以操作数据,但是乐观锁在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息
乐观锁插件实现方式:
1.取出记录时,获取当前的version
2.更新时,带上这个version
3.执行更新时,set version = newVersion where version = oldVersion
4.如果version不对就更新失败
注册乐观锁插件
1.interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
2.修改实体类,添加version属性,并在该属性上增加@Version注解,同时在表中也添加version字段