Mybatis-Plus的SQL語句組拼原理說明

記錄查找自動組拼SQL語句的過程

首先在BaseMapper其中的一個方法下打個斷點

在這裡插入圖片描述

在斷點顯示的值欄找到相關的SQL

發現SQL語句在MappedStatement對象中,而sqlSource存的就是相關的sql語句

在這裡插入圖片描述

在這裡插入圖片描述

然後在MappedStatement這個對象打斷點,看看到底是哪個對象對它進行瞭操作

在這裡插入圖片描述

發現是AutoSqlInjector創建瞭MappedStatement

在這裡插入圖片描述

在AutoSqlInjector對象找到與selectById相關的一個方法,打斷點

在這裡插入圖片描述

SqlSource果然在這裡創建出來瞭,createSqlSource就是具體過程,然後添加到MappedStatement對象中,此SQL完成組拼

在createSqlSource方法打下斷點,進入具體的組拼過程

在這裡插入圖片描述

方法sqlSelectColumns就是具體的組拼方法,一直在此方法進行遞歸

在這裡插入圖片描述

在此方法中,迭代器在不斷迭代組拼

在這裡插入圖片描述

最後SQL全部完成組拼,存在集合對象中,就可以取出來瞭

學會從逆推到順推,學會怎樣打斷點是關鍵。

mybatisPlus註解版動態拼接sql

前段時間不是在實習嘛,公司用的是註解開發不用xml的,特此記錄註解版動態拼接sql,還有使用過程中踩坑集合。

先記錄1.0版本,以後遇到別的在完善就是。

其實就是在xml那種格式下面最外面一層用< /script > 標簽包住就行瞭,其餘部分用英文雙引號包住,表達式用單引號包住就ok瞭,@Param(“idMin”) Integer idMin與#{idMin}對應。

不過我這裡如果idMin為null那麼between null and 20是查不出數值的,< /script > 標簽是重點,這種sql業務邏輯讀者以後自己改。

/**
 * @author zzh
 * @since 2021-01-26
 */
public interface GoodsMapper extends BaseMapper<Goods> {
    @Select("<script>"
            + "select * from goods where id between"
            + "<if test='#{idMin}!=null'>" + "#{idMin} and "+"</if>"
            + "<if test='#{idMax}!=null'>" + "#{idMax}" + "</if>"
            + "</script>")
    public List<Goods> select(@Param("idMin") Integer idMin, @Param("idMax") Integer idMax);
}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: