2019独角兽企业重金招聘Python工程师标准>>>
MP版本为2.3
注入主要靠com.baomidou.mybatisplus.mapper.AutoSqlInjector 来完成
①,mybatis先进行sql语句的映射,然后mybatis-plus再添加
②,我们在AutoSqlInjector .injectDeleteByIdSql 打一个断点
我们再看一下SqlMethod.DELETE_BY_ID 这个模板,原来也没啥神秘的,定义了一个sql模板,写了通用的sql语句,由此我们也知道,mp不能用于nosql,而且mybatis本身就不支持nosql,mp只是mybatis的增强工具,mybatis都做不到的事,mp能做到才有鬼呢,所以这些mp不支持nosql也是合理的
(
那mp支持的关系型数据库有哪些呢?我们可以通过看com.baomidou.mybatisplus.generator.config.rules.DbType得知:
)
③,如果是批量删除还是个假的批量,利用的是foreach循环,利用的mybatis的ExecutorType应该还是SIMPLE
④,利用 String.format 初步解析sql
⑤,利用mybatis的languageDriver 得到sqlSource 对象
⑥,调用addDeleteMappedStatement方法,添加Statement
时机是调用本对象的this.addMappedStatement方法,sql命令类型为delete
⑦,我们在AutoSqlInjector .addMappedStatement 打一个断点
这里我们可以看出,mp在添加sql时会先判断我们有无手动进行添加同名的sql,有则跳过
⑧,进入builderAssistant.addMappedStatement 方法
可以看出,先里利用传入的参数封装成一个MappedStatement 对象;再添加到Configuration的mappedStatements 中