MyBatis的动态SQL主要是为了解决手动拼接sql语句的麻烦。
– if 判断语句,用于单条件分支判断
– choose(when,otherwise) 相当于switch-case-default,用于多条件判断
– where、set 辅助元素,用于处理SQL拼装
– trim 辅助元素,用于处理特殊字符
– foreach 循环语句,相当于for
在MyBatis中,
相当于switch...case...default语句
会在写入where元素的地方输出一个where,另外一个好处是你不需要考虑where元素里面的条件输出是什么样子的,MyBatis会智能的帮你处理,如果所有的条件都不满足那么MyBatis就会查出所有的记录,如果输出后是and开头的,MyBatis会把第一个and忽略当然如果是or开头的,MyBatis也会把它忽略;此外,在where元素中你不需要考虑空格的问题,MyBatis会智能的帮你加上。
当update语句中没有使用if标签时,如果有一个参数为 null,都会导致错误。
当在update语句中使用if标签时,如果前面的if没有执行 ,则或导致逗号多余错误。使用set标签可以将动态的配置 SET 关键字,和剔除追加到条件末尾的任何不相关的逗号。
update emp
ename=#{ename},
job=#{job},
mgr=#{mgr},
hiredate=#{hiredate},
sal=#{sal},
comm=#{comm},
deptno=#{deptno},
where empno=#{empno}
– 主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
– foreach元素的属性主要有 item,index,collection, open,separator,close。
– item表示集合中每一个元素进行迭代时的别名
– index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置
– open表示该语句以什么开始
– separator表示在每次进行迭代之间以什么符号作为分隔符
– close表示以什么结束
– collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:
通过Sql代码片段,实现sql代码重用
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp
where
empno in