mybatis--4 动态查询
查询的时候如果某些条件没带可能sql拼装会有问题
1、给where后面加上1=1,以后的条件都andXXX.
2、mybatis使用where标签来将所有的查询条件包括在内。如果标签返回的内容是以 AND 或OR 开头的,则它会剔除掉r
后面多出的and或者or where标签不能解决
prefix=":前缀: trim标签体中是整个字符串拼串后的结果。
prefix给拼串后的整个字符串加一个前缀
prefixOverrides="" :前缀覆盖:去掉整个字符串前面多余的字符
suffix="":后缀:suffix给拼串后的整个字符串加一个后缀
suffixOverrides=后缀覆盖:去掉整个字符串后面多余的字符
set标签:解决:当 update 语句中没有使用 if 标签时,如果有一个参数为 null,都会导致错误。当在 update 语句中使用if标签时,如果前面的if没有执行,则或导致逗号多余错误。
foreach标签:
collection:指定要遍历的集合:
list类型的参数会特殊处理封装在map中,map的key就叫list
item:将当前遍历出的元素赋值给指定的变量
separator:每个元素之间的分隔符
open:遍历出所有结果拼接一个开始的字符
close:遍历出所有结果拼接一个结束的字符
index:索引。遍历list的时候是index就是索引,item就是当前值
遍历map的时候index表示的就是map的key, item就是map的值
#{变量名}就能取出变量的值也就是当前遍历出的元素
批量保存:
第一种方式:
第二种方式:
配置文件中加入允许批量操作:
oracle中不允许第一种的语法,所以:
第一种批量保存方法采用如下语法:
第二种批量保存方法采用如下语法:
mybatis默认两个内置参数:
不只是方法传递过来的参数可以被用来判断,取值。。。
_parameter: 代表整个参数
单个参数:_ parameter就是这个参数
多个参数:参数会被封装为一个map;_ parameter就是代表这个map
_databaseId :如果配置了databaseIdProvider标签。
_databaseId就是代表当前数据库的别名oracle
bind标签:
1、sql抽取:经常将要查询的列名,或者插入用的列名抽取出来方便引用
2、include来引用已经抽取的sq1:
3、include还可以自定义一些property, sql标签内部就能使用自定义的属性
include- property:取值的正确方式${prop},
#{不能使用这种方式}
引用: