Mybatis 动态 sql 有什么用?执行原理是什么?

回答·3
最热
最新
  • 首先在解析 xml 配置文件的时候,会有一个 SqlSource sqlSource = langDriver.createSqlSource(configuration, context, parameterTypeClass) 的操作 createSqlSource 底层使用了 XMLScriptBuilder 来对 xml 中的标签进行解析 XMLScriptBuilder 调用了 parseScriptNode()的方法, 在 parseScriptNode()的方法中有一个 parseDynamicTags()方法,会对 nodeHandlers 里的标签根据不同的 handler 来处理不同的标签 然后把 DynamicContext 结果放回 SqlSource 中 DynamicSqlSource 获取 BoundSql 在 Executor 执行的时候,调用 DynamicSqlSource 的解析方法,并返回解析好的 BoundSql,和已经排好序,需要替换的参数。 简单的说:就是使用 OGNL 从 sql 参数对象中计算表达式的值,根据表达式的值动态拼接 sql
  • 灵活写 sql,减少与编程语言的侵入性,原理就是通过语法解析写的条件等最终拼成一个完整的可执行 sql 交给 jdbc 驱动去提交到服务器执行
  • 动态 sql 说白了,就是依据你所提供的条件,让 sql 起到一个自适应的效果,例如有一个表,含有 id, name,age 三个字段,你的 sql 语句不确定这个值有没有去传,在外层 java 判断会非常麻烦,要写多条 sql 语句,动态 sql 就是起到自适应,有的话,sql 语句添加,没有则不添加,执行原理底层是 jdbc