configuration.getVariables());// issue #127TextSqlNodetextSqlNode=newTextSqlNode(script);// ②根据TextSqlNode的内部属性isDynamic来进行解析帮助类的分配if(textSqlNode.isDynamic()) {returnnewDynamicSqlSource(configuration, textSqlNode);
我们主要关注DynamicSqlSource这个类,可以看到它就两个属性configuration、rootSqlNode,分别是全局配置和刚刚分析的MixedSqlNode,也可以从他的getBoundSql方法中看到后面对rootSqlNode的使用,这个留着后面分析。总结 在configuration中有一个map属性mappedStatements,他保存着MappedStatement对象,每个MappedStatement对象对应一...
DynamicSqlSource是解析动态sql的类 publicclassDynamicSqlSourceimplementsSqlSource{privatefinalConfigurationconfiguration;privatefinalSqlNoderootSqlNode;publicDynamicSqlSource(Configurationconfiguration,SqlNoderootSqlNode){this.configuration=configuration;this.rootSqlNode=rootSqlNode;}@OverridepublicBoundSqlgetBoundSql(Obje...
sqlSource = null;//是否为动态Sqlif (isDynamic) { //动态Sql则生成DynamicSqlSource sqlSource = new DynamicSqlSource(configuration, rootSqlNode); } else { //否则为静态SqlSource sqlSource = new RawSqlSource(configuration, rootSqlNode, parameterType); }return sqlSource; } // An ...
SqlSource Sql源接口,代表从xml文件或注解映射的sql内容,主要就是用于创建BoundSql,有实现类DynamicSqlSource(动态Sql源),StaticSqlSource(静态Sql源)等: publicinterfaceSqlSource { BoundSql getBoundSql(Object parameterObject); } BoundSql类,封装mybatis最终产生sql的类,包括sql语句,参数,参数源数据等参数: XNod...
一、SqlSource处理入口 二、SqlSource处理逻辑 1、XMLScriptBuilder 构造方法 2、解析动态sql 3、DynamicSqlSource 4、RawSqlSource解析sql (1)parse方法解析sql ...
动态SQL 是 MyBatis 的强大特性之一。如果你使用过JDBC或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。 使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动...
MyBatis中提供了很多种方式来实现动态SQL,包括if、choose、when、otherwise、trim、where、set等。 2. if标签 if标签是MyBatis中最常用的动态SQL标签之一。它通常用来判断条件是否成立,从而确定是否加入SQL语句中。下面是一段示例代码: xml复制代码<select id="selectUsers" resultMap="UserResultMap"> ...
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。 使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大...
SqlSource接口 SqlSource接口是用来创建被数据库执行的sql,它只有一个getBoundSql()方法 publicinterfaceSqlSource{BoundSqlgetBoundSql(ObjectparameterObject);} 1. 2. 3. 4. 5. 实现类有DynamicSqlSource、StaticSqlSource、RawSqlSource、ProviderSqlSource、VelocitySqlSource,这里重点说一下前三个实现类 ...