mybatis学习之路----动态sql之choose when 4000 otherwise
2017-09-27 11:16
190 查看
点滴记载,点滴进步,愿自己更上一层楼。
官方文档 传送门
choose节点,用法跟java中的switch 语法相似(官方文档这么说,事实也是这样)。
节点用法。
<choose>
<when test="username != null">
username = #{username}
</when>
<when test="password != null">
password = #{password}
</when>
<otherwise>
1=1
</otherwise>
</choose>里面的一条条的when其实就相当于一条条的 <if test ....
mybatis在解析choose节点的时候就是将一条条的when放入到list中,otherwise 相关内容专门放到一个对象中,
然后循环着查找条件成立的一条,然后将该条的sql拼接到sql中,如果when条件都不成立,则直接执行otherwise中的内容。
源码:
public class ChooseSqlNode implements SqlNode {
private SqlNode defaultSqlNode;
private List<SqlNode> ifSqlNodes;
public ChooseSqlNode(List<SqlNode> ifSqlNodes, SqlNode defaultSqlNode) {
this.ifSqlNodes = ifSqlNodes;
this.defaultSqlNode = defaultSqlNode;
}
@Override
public boolean apply(DynamicContext context) {
for (SqlNode sqlNode : ifSqlNodes) {
if (sqlNode.apply(context)) {
return true;
}
}
if (defaultSqlNode != null) {
defaultSqlNode.apply(context);
return true;
}
return false;
}
}简单明了。
官方文档 传送门
choose节点,用法跟java中的switch 语法相似(官方文档这么说,事实也是这样)。
节点用法。
<choose>
<when test="username != null">
username = #{username}
</when>
<when test="password != null">
password = #{password}
</when>
<otherwise>
1=1
</otherwise>
</choose>里面的一条条的when其实就相当于一条条的 <if test ....
mybatis在解析choose节点的时候就是将一条条的when放入到list中,otherwise 相关内容专门放到一个对象中,
然后循环着查找条件成立的一条,然后将该条的sql拼接到sql中,如果when条件都不成立,则直接执行otherwise中的内容。
源码:
public class ChooseSqlNode implements SqlNode {
private SqlNode defaultSqlNode;
private List<SqlNode> ifSqlNodes;
public ChooseSqlNode(List<SqlNode> ifSqlNodes, SqlNode defaultSqlNode) {
this.ifSqlNodes = ifSqlNodes;
this.defaultSqlNode = defaultSqlNode;
}
@Override
public boolean apply(DynamicContext context) {
for (SqlNode sqlNode : ifSqlNodes) {
if (sqlNode.apply(context)) {
return true;
}
}
if (defaultSqlNode != null) {
defaultSqlNode.apply(context);
return true;
}
return false;
}
}简单明了。
相关文章推荐
- mybatis学习之路----动态sql之trim标签源码详解,附带where标签解析
- MyBatis参数传入集合之foreach动态sql
- sql行列转换例子(动态)
- Spring3 整合MyBatis3 配置多数据源 动态选择SqlSessionFactory
- 理解性能的奥秘——应用程序中慢,SSMS中快(6)——SQL Server如何编译动态SQL
- oracle动态sql语句处理
- c++ builder adoquery sql语句的动态增加
- Sql 行列转换 动态Sql(Pivot)
- Linq to Sql : 动态构造Expression进行动态查询
- Sql Server游标使用 exec函数执行动态sql
- sql server2008 获取动态sql的变量值
- MyBatis 动态SQL
- Mybatis(八)-一动态SQL
- 例子:动态SQL中使用临时表
- SQL server 动态SQL对变量讲行赋值
- 动态SQL
- 分享一下SQL Server执行动态SQL的正确方式
- SQL Server存储过程中执行动态SQL语句
- 在oracle存储过程中执行动态sql
- MyBatis动态SQL完整版