需求:

    计算平台,有很多表,打算提供一个基于sql的服务接口, sql不能完全在配置页面写死,  要能根据参数不同执行不同的语义,防止sql个数爆炸
  • 把mybatis原码down下来, 改造一下测试用例, 观察一下动态sql的原理
    使用mybatis的动态sql解析能力生成sql

  • 可以看出IfSqlNode WhereSqlNode....这些sqlNode是解析xml文件得到的, 中间经过各种组合, 总不能再手动实现xml解析过程
    sqlSource.getBoundSql会根据入参自动计算ognl表达式,生成动态sql

  • 继续查看 XMLMapperBuilder, 这个可以自动解析xml, 但是mybatis依赖一些java pojo, 如果没有这些pojo,还能生成sql吗? 答案是肯定的

使用mybatis的动态sql解析能力生成sql使用mybatis的动态sql解析能力生成sql

总结:

Q:如何把xml文本解析成各种sqlNode
A: XMLMapperBuilder.parse自动生成各种sqlNode

Q:没有java对象时如何使用动态解析的能力, 生成自定义sql
A: XMLMapperBuilder指定sql文件位置,然后用mappedStatement.getBoundSql(...params).getSql()即可得到动态生成的sql
后端只需要对每个sql生成一个xml字符串

相关文章:

  • 2022-12-23
  • 2021-05-21
  • 2021-10-26
  • 2021-11-23
  • 2021-11-19
  • 2023-02-05
  • 2021-07-12
猜你喜欢
  • 2021-08-12
  • 2021-11-19
  • 2022-12-23
  • 2022-12-23
  • 2019-07-30
  • 2022-12-23
相关资源
相似解决方案