概念:是mybatis强大特性之一,一般会用JDBC技术和其他框架的,都知道SQL语句的拼接和其他必要的细节导致的语句出错是很烦心的。也就是SQL语句要去掉不必要的空格,省略逗号,但mybatis不需要考虑这些。mybatis是基于OGNL表达式的。可以方便的在SQL语句中实现某些逻辑。
动态SQL语句有:
if:语句(简单的条件判断)
chose:(when.othevwize)类似java的switch和jst中的chose就是对比选定值
trim:(对0包含的内容加上prefix,或者suffx等,前缀,后缀)
where:(主要用来简化SQL语句中的where条件判断的能智能处理and,or,不必担心多余导致的语法错误)
set:(主要用于更新)
foreach:(在实现mybatis in语句查询时特别有用)
用法:
if
where
当select语句使用的if便签较多时,用where可以解决。该标签会知道如果它包含的标签中返回值得话,它就插入一个where。此外,如果标签返回的内容是and或or开头,则会刷除掉。
作用where元素会在写入where元素的地方输出一个where。另外一个好处是你不需要考虑where元素里面的条件输出是什么样子的。mybatis会智能的帮处理,如果所有条件都不满足,那么mybatis就会查出所有记录,如果输出结果后是and开头的,mybatis会把第一个and忽略,当然如果是or开头的也一样。此外在where元素中你不用考虑空格的问题。mybatis会智能的帮你加上。如果第一个if没有执行那么后面的if中and同样忽略。
set
当update语法中没有使用if标签时。如果有一个参数为null,都会导致错误。使用if标签时,前面没有执行,或逗号多余也会出错,set标签可以将动态的配置set关键字,并剔除追加到条件末尾不相关的逗号,如果某项为null则不进行更新,而是保持数据库原值。
set标签元素主要是用在更新操作的时候,它主要功能和where标签差不多,主要包含的语前输出一个set,然后如果包含的语句是以逗号结束的话将会包该逗号忽略,如果set包含的内容为空的语则会出错。有了set元素就可以动态的更新那些修改的字段。
chose
只选取一个条件。主要if表达式为true就会执行if中的条件。mybatis提供了按顺序判断其内部when标签中的text条件是否成立,如果有一个成立,则chose结束。当chose中所有when的条件都不满足是,则执行otherwise中的SQL(类似java的switch和jst中的chose就是对比选定值),chose为switch,when为case,otherwise则为default。
when元素表示当when中的条件满足的时候就输出其中的内容。按条件顺序,当when中有条件满足的时候,就会跳出chose所有的when和otherwise条件,只有一个会输出,当所有的条件都不满足的时候就输出otherwise中的内容。所以当id!=null的时候就输出and id=1 不再判断条件(只选一)。