https://mp.baomidou.com/guide/crud-interface.html
Mapper 继承该接口后,无需编写 mapper.xml 文件,即可获得CRUD功能
这个 Mapper 支持 id 泛型
如果BaseMapper接口不足以满足你的基本需求,可以使用条件构造器来实现你的需求、也可是自己定义方法,在编写***Mapper.xml自己写SQL语句完成需求
https://mp.baomidou.com/guide/wrapper.html
从上面的图中,AbstractWrapper接口继承接口和实现的一些方法,利用这些方法可以实现 条件、逻辑、模糊、查询,增删改、排序的等操作。如果你想扩展,定义自己的方法,可以采用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
我们提供的插件都将基于此接口来实现功能
目前已有的功能:
注意:
使用多个功能需要注意顺序关系,建议使用如下顺序
总结: 对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语法构建的处理 * */