使用mybatis的動態sql解析能力生成sql


需求:

    計算平台,有很多表,打算提供一個基於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字符串


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM