`
eric_weitm
  • 浏览: 235493 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mybatis plus的插件扩展

阅读更多

mybatis plus的插件扩展

 

一、jdbc的一般模式

1、建立连接

2、创建statement

3、设置参数并执行

4、解析结果

5、释放资源

 

个性化的部分是  sql语句 参数映射 结果映射

 

二、mybatis的映射器

MappedStatement = SqlCommandType(CRUD的类别)+SqlSource+ParameterMap+ResultMap+BoundSql

SqlSource:原始xml中设置的sql语句,还没有解释loop等语义

BoundSql: loop、while等语义处理完之后的语句,一般带?和参数等信息

BoundSql = sql(语句)+ parameterObject(入参) + ParameterMapping(参数映射)

 

三、mybatis的4大对象

Executor=StatementHandler(预编译、设置?、执行)+ParameterHandler(塞参数)+ResultHandler(结果映射)

 

四、mybatis的插件机制

1、interceptor抽象(插件)

核心是一层一层的包装,在invoke的时候进行hack,代理的时候是从最外层到最内层的

 

public interface Interceptor {

  // 代理的具体逻辑

  Object intercept(Invocation invocation) throws Throwable;

 

  // 生成代理对象

  default Object plugin(Object target) {

    return Plugin.wrap(target, this);

  }

 

  // 初始化属性

  default void setProperties(Properties properties) {

    // NOP

  }

 

}

 

2、MetaObject 操作对象的属性

3、interceptor拦截的是4大对象之一

 

五、mybatis plus的插件机制

1、自己抽象了InnerInterceptor

2、手动创建MybatisPlusInterceptor这个bean,并设置相关的InnerInterceptor

InnerInterceptor调用流程:

一、Executor的plugin

select语句

1》 willDoQuery

2》 beforeQuery

 

update语句

1》willDoUpdate

2》beforeUpdate

 

二、StatementHandler的prepare

 

例子:

@Bean

@ConditionalOnMissingBean(value = { OptimisticLockerInnerInterceptor.class })

public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() {

 

OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor = new OptimisticLockerInnerInterceptor();

 

return optimisticLockerInnerInterceptor;

}

 

// 租户隔离

@Bean

@ConditionalOnMissingBean(value = { TenantLineInnerInterceptor.class })

public TenantLineInnerInterceptor tenantLineInnerInterceptor() {

 

TenantLineInnerInterceptor tenantLineInnerInterceptor = new TenantLineInnerInterceptor();

TenantLineHandler handler = new TenantLineHandler() {

 

public Expression getTenantId() {

return null;

}

 

    public String getTenantIdColumn() {

        return "tenant_id";

    }

 

    public boolean ignoreTable(String tableName) {

        return false;

    }

};

 

tenantLineInnerInterceptor.setTenantLineHandler(

handler

 

);

 

return tenantLineInnerInterceptor;

}

 

// 总集成

@Bean

public MybatisPlusInterceptor mybatisPlusInterceptor() {

MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor());

interceptor.addInnerInterceptor(blockAttackInnerInterceptor());

interceptor.addInnerInterceptor(dataPermissionInterceptor());

interceptor.addInnerInterceptor(illegalSQLInnerInterceptor());

interceptor.addInnerInterceptor(paginationInnerInterceptor());

interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());

interceptor.addInnerInterceptor(tenantLineInnerInterceptor());

return interceptor;

}

 

select语句的语法

https://dev.mysql.com/doc/refman/8.0/en/select.html

 

分享到:
评论

相关推荐

    mybatis-plus-join是mybatis plus的一个多表插件

    mybatis-plus-join是mybatis plus的一个多表插件,只要会用mp就会用这个插件,仅仅依赖了lombok,而且是扩展mp的构造器并非更改原本的构造器,不会对原有项目产生一点点影响 mybatis-plus的多表插件完全按照mybats ...

    SpringBoot使用Mybatis Plus详解含示例代码(值得珍藏)

    MyBatis Plus是一个功能强大的MyBatis扩展插件,它简化了MyBatis的使用,提供了丰富的功能和注解,使得在Spring Boot项目中进行数据操作更加方便快捷。通过本文的介绍,你可以了解到如何在Spring Boot中使用MyBatis ...

    Mybatis plus 基于 springBoot 源码

    无侵入:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性 依赖少:仅仅依赖 Mybatis 以及 ...

    mybatis-plus-advance插件

    本插件需要配合mybatis_plus_advance_idea_plugin 插件 一起使用

    浅谈MyBatis-Plus学习之插件扩展.docx

    好像MP已经在BaseMapper中提供了相关分页方法selectPage,为什么还要使用分页插件呢? 这是因为selectPage通过ibatis的RowBounds进行分页, 也就是在内存中进行分页 ,所以不推荐 而分页插件的使用,是在相关的...

    最新_尚硅谷_mybatisplus_全套视频教程

    本套教程基于MyBatis-Plus新2.3版本,详细讲授:集成Mybatis-Plus、通用CRUD、EntityWrapper条件构造器、ActiveRecord 等基本操作,更有代码生成器、插件扩展、自定义全局操作、公共字段填充、Oracle主键Sequence处理...

    mybatis-plus-extension-3.1.0.jar

    mybatis-plus-extension.jar 各个版本,免费下载。...mybatis-plus 的扩展插件。,各个版本,免费下载。 mybatis 增强工具包的扩展插件,各个版本,免费下载。 下载不了,可关注我,评论区联系我。

    mybatis-plus-extension-3.5.3.jar

    mybatis-plus-extension.jar 各个版本,免费下载。...mybatis-plus 的扩展插件。,各个版本,免费下载。 mybatis 增强工具包的扩展插件,各个版本,免费下载。 下载不了,可关注我,评论区联系我。

    mybatis-plus-extension-3.3.0.jar

    mybatis-plus-extension.jar 各个版本,免费下载。...mybatis-plus 的扩展插件。,各个版本,免费下载。 mybatis 增强工具包的扩展插件,各个版本,免费下载。 下载不了,可关注我,评论区联系我。

    mybatis-plus-extension-3.2.0.jar

    mybatis-plus-extension.jar 各个版本,免费下载。...mybatis-plus 的扩展插件。,各个版本,免费下载。 mybatis 增强工具包的扩展插件,各个版本,免费下载。 下载不了,可关注我,评论区联系我。

    mybatis-plus-extension-3.4.3.jar

    mybatis-plus-extension.jar 各个版本,免费下载。...mybatis-plus 的扩展插件。,各个版本,免费下载。 mybatis 增强工具包的扩展插件,各个版本,免费下载。 下载不了,可关注我,评论区联系我。

    mybatis-plus-extension-3.0.3.jar

    mybatis-plus-extension.jar 各个版本,免费下载。...mybatis-plus 的扩展插件。,各个版本,免费下载。 mybatis 增强工具包的扩展插件,各个版本,免费下载。 下载不了,可关注我,评论区联系我。

    mybatis-plus-extension-3.5.0.jar

    mybatis-plus-extension.jar 各个版本,免费下载。...mybatis-plus 的扩展插件。,各个版本,免费下载。 mybatis 增强工具包的扩展插件,各个版本,免费下载。 下载不了,可关注我,评论区联系我。

    mybatis-plus-extension-3.0.6.jar

    mybatis-plus-extension.jar 各个版本,免费下载。...mybatis-plus 的扩展插件。,各个版本,免费下载。 mybatis 增强工具包的扩展插件,各个版本,免费下载。 下载不了,可关注我,评论区联系我。

    mybatis-plus-extension-3.5.3.1.jar

    mybatis-plus-extension.jar 各个版本,免费下载。...mybatis-plus 的扩展插件。,各个版本,免费下载。 mybatis 增强工具包的扩展插件,各个版本,免费下载。 下载不了,可关注我,评论区联系我。

    mybatis-plus-extension-3.5.3.2.jar

    mybatis-plus-extension.jar 各个版本,免费下载。...mybatis-plus 的扩展插件。,各个版本,免费下载。 mybatis 增强工具包的扩展插件,各个版本,免费下载。 下载不了,可关注我,评论区联系我。

    mybatis-plus-extension-3.4.3.3.jar

    mybatis-plus-extension.jar 各个版本,免费下载。...mybatis-plus 的扩展插件。,各个版本,免费下载。 mybatis 增强工具包的扩展插件,各个版本,免费下载。 下载不了,可关注我,评论区联系我。

    Mybatis plus增强工具包-其他

    Mybatis-plus是MyBatis增强工具包,用于简化CRUD操作。该工具包为MyBatis提供了一些高效,有用,即用的功能,使用它可以有效地节省您的开发时间。 Mybatis-plus特征: 与MyBatis完全兼容 启动时自动配置 开箱即用的...

    mybatis-plus-extension-3.0-RC3.jar

    mybatis-plus-extension.jar 各个版本,免费下载。...mybatis-plus 的扩展插件。,各个版本,免费下载。 mybatis 增强工具包的扩展插件,各个版本,免费下载。 下载不了,可关注我,评论区联系我。

    Java数据库技术MybatisPlus笔记和代码包

    2. 分页插件:MyBatis Plus提供了内置的分页插件,可以方便地进行结果集的分页查询。 3. 通用Mapper:MyBatis Plus提供了通用Mapper的功能,可以通过继承BaseMapper接口,自动实现大部分的CURD操作。 4. 条件构造...

Global site tag (gtag.js) - Google Analytics