MyBatisPlus初学

一、CRUD操作

https://mp.baomidou.com/guide/crud-interface.html

Mapper 继承该接口后,无需编写 mapper.xml 文件,即可获得CRUD功能
这个 Mapper 支持 id 泛型

MyBatisPlus初学_第1张图片 

如果BaseMapper接口不足以满足你的基本需求,可以使用条件构造器来实现你的需求、也可是自己定义方法,在编写***Mapper.xml自己写SQL语句完成需求

二、条件构造器

https://mp.baomidou.com/guide/wrapper.html

MyBatisPlus初学_第2张图片

MyBatisPlus初学_第3张图片  

MyBatisPlus初学_第4张图片

MyBatisPlus初学_第5张图片 

从上面的图中,AbstractWrapper接口继承接口和实现的一些方法,利用这些方法可以实现   条件、逻辑、模糊、查询,增删改、排序的等操作。如果你想扩展,定义自己的方法,可以采用SQL注入的方式实现

三、SQL注入

https://mp.baomidou.com/guide/sql-injector.html

自定义自己的通用方法可以实现接口 ISqlInjector 也可以继承抽象类 AbstractSqlInjector 注入通用方法 SQL 语句 然后继承 BaseMapper 添加自定义方法,全局配置 sqlInjector 注入 MP 会自动将类所有方法注入到 mybatis 容器中。

1、自定义方法 findAll  并实现它

public class FindAll extends AbstractMethod {
    @Override
    public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) {
        //参考selectById来些自定义的注入方法
        //sqlMethod :我们自定义的方法名 ;  sqlSource
        String sql = "SELECT * FROM " + tableInfo.getTableName();
        SqlSource sqlSource = languageDriver.createSqlSource(configuration,sql,mapperClass);
        return this.addSelectMappedStatement(mapperClass, "findAll" , sqlSource, modelClass, tableInfo);
    }
}

2、利用注入器将自定义方法注入mp容器中

public class MySqlInjector extends DefaultSqlInjector {
    @Override
    public List getMethodList() {
        List list = super.getMethodList();
        //添加自定义的方法 findAll
        list.add(new FindAll());
        return list;
    }
}

3、编写自己的MybaseMapper接口,并继承BaseMapper接口 。接下来就可以使用  MybaseMapper接口实现CRUD操作。

注:对于SQL的注入,我们应采用泛型来对于方法的扩充。

public interface MybaseMapper extends BaseMapper {
    List findAll();

    //其他方法
}

四、插件

https://mp.baomidou.com/guide/interceptor.html#mybatisplusinterceptor

InnerInterceptor

我们提供的插件都将基于此接口来实现功能

目前已有的功能:

  • 自动分页: PaginationInnerInterceptor
  • 多租户: TenantLineInnerInterceptor
  • 动态表名: DynamicTableNameInnerInterceptor
  • 乐观锁: OptimisticLockerInnerInterceptor
  • sql性能规范: IllegalSQLInnerInterceptor
  • 防止全表更新与删除: BlockAttackInnerInterceptor

注意:

使用多个功能需要注意顺序关系,建议使用如下顺序

  • 多租户,动态表名
  • 分页,乐观锁
  • sql性能规范,防止全表更新与删除

总结: 对sql进行单次改造的优先放入,不对sql进行改造的最后放入

Mybatis3 插件采用责任链模式,通过动态代理组织多个拦截器(插件),通过这些拦截器可以改变Mybatis的默认行为(诸如SQL重写之类的)。

自定义一个插件步骤:

/*
* MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法
调用包括:
1. Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
2. ParameterHandler (getParameterObject, setParameters)
3. ResultSetHandler (handleResultSets, handleOutputParameters)
4. StatementHandler (prepare, parameterize, batch, update , query)
我们看到了可以拦截Executor接口的部分方法,比如update,query,commit,rollback等方法,还有其他接口的
一些方法等。
总体概括为:
1. 拦截执行器的方法
2. 拦截参数的处理
3. 拦截结果集的处理
4. 拦截Sql语法构建的处理
* */

你可能感兴趣的:(MyBatisPlus,mybatis)