zoukankan      html  css  js  c++  java
  • 使用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字符串

  • 相关阅读:
    C语言文件操作
    scrapy 提取XML文档
    汇编指令和寄存器
    C语言知识点
    sqlalchemy 的sqlite多线程设置
    Unity 打AssetBundle和加载方案
    unity 4种实现动态障碍方法
    入心诗词记
    人间问答
    生活中有哪些实用的心理学知识?
  • 原文地址:https://www.cnblogs.com/yszzu/p/11005769.html
Copyright © 2011-2022 走看看