需求:
計算平台,有很多表,打算提供一個基於sql的服務接口, sql不能完全在配置頁面寫死, 要能根據參數不同執行不同的語義,防止sql個數爆炸
-
把mybatis原碼down下來, 改造一下測試用例, 觀察一下動態sql的原理
-
可以看出IfSqlNode WhereSqlNode....這些sqlNode是解析xml文件得到的, 中間經過各種組合, 總不能再手動實現xml解析過程
sqlSource.getBoundSql會根據入參自動計算ognl表達式,生成動態sql -
繼續查看 XMLMapperBuilder, 這個可以自動解析xml, 但是mybatis依賴一些java pojo, 如果沒有這些pojo,還能生成sql嗎? 答案是肯定的


總結:
Q:如何把xml文本解析成各種sqlNode
A: XMLMapperBuilder.parse自動生成各種sqlNode
Q:沒有java對象時如何使用動態解析的能力, 生成自定義sql
A: XMLMapperBuilder指定sql文件位置,然后用mappedStatement.getBoundSql(...params).getSql()即可得到動態生成的sql
后端只需要對每個sql生成一個xml字符串