前提:建议配置mybatis的执行sql打印功能
或这种形式
mybatis动态sql可以在mapper.xml映射文件内,以标签的形式编写动态sql,执行时根据表达式的值,完成逻辑判断并动态拼接sql.
动态标签:
trim,where,set,foreach,if,choose,when,otherwise,bind
注意:
1.<where>与<if>配合使用,当if内的条件生效进入if时,会自动去掉第一个逻辑运算符(or,and)
2.<choose>,<when>,<otherwise>配合使用,类似于java的switch ,case,default
如图:
3.<set>为update时使用的动态标签,常配合<if>使用,会自动剔除追加到条件末尾的任何不相干的符号(即,)
4.<trim>可以定制化动态标签,可以完成<set>或<where>标记的功能.主要有4个参数:
① prefix:前缀
② prefixOverrides:去掉第一个and或者是or
③ suffix:后缀
④ suffixOverrides:去掉最后一个逗号,也可以是其他的标记
如图:
注:当<trim>内的条件没有一个执行时,后缀无法添加
5.<foreach>标签
foreach标签主要有以下参数:
item :循环体中的具体对象。支持属性的点路径访问,如item.age,item.info.details,在list和数组中是其中的对象,在map中是value。
index :在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选。
open :表示该语句以什么开始
close :表示该语句以什么结束
separator :表示元素之间的分隔符,例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。
6.<bind>标签用于模糊查询
根据dialect方言,不同的数据库的模糊查询语句并不相同,通过<bind>标签进行模糊查询可以依靠不同的数据库上运行.
<bind>标签有两个属性,name为将要执行的sql语句提供一个变量名,value为拼接的字符串.
如图:
参考文献:
————————————————
https://blog.csdn.net/lks1139230294/article/details/87957689