mybatis-plus sql注入原理

MP版本爲2.3sql

注入主要靠com.baomidou.mybatisplus.mapper.AutoSqlInjector 來完成數據庫

①,mybatis先進行sql語句的映射,而後mybatis-plus再添加mybatis

②,咱們在AutoSqlInjector .injectDeleteByIdSql 打一個斷點app

咱們再看一下SqlMethod.DELETE_BY_ID 這個模板,原來也沒啥神祕的,定義了一個sql模板,寫了通用的sql語句,由此咱們也知道,mp不能用於nosql,並且mybatis自己就不支持nosql,mp只是mybatis的加強工具,mybatis都作不到的事,mp能作到纔有鬼呢,因此這些mp不支持nosql也是合理的nosql

工具

那mp支持的關係型數據庫有哪些呢?咱們能夠經過看com.baomidou.mybatisplus.generator.config.rules.DbType得知:ui

 

this

③,若是是批量刪除仍是個假的批量,利用的是foreach循環,利用的mybatis的ExecutorType應該仍是SIMPLEorm

④,利用 String.format 初步解析sql對象

⑤,利用mybatis的languageDriver 獲得sqlSource 對象

⑥,調用addDeleteMappedStatement方法,添加Statement

時機是調用本對象的this.addMappedStatement方法,sql命令類型爲delete

⑦,咱們在AutoSqlInjector .addMappedStatement 打一個斷點

這裏咱們能夠看出,mp在添加sql時會先判斷咱們有無手動進行添加同名的sql,有則跳過

⑧,進入builderAssistant.addMappedStatement 方法

能夠看出,先裏利用傳入的參數封裝成一個MappedStatement 對象;再添加到Configuration的mappedStatements 中

相關文章
相關標籤/搜索