| 元素 | 作用 | 场景 |
|---|---|---|
| select、insert、update、delete | 定义sql语句类型 | 增删改查 |
| if、foreach、choose | 控制动态sql拼接 | 条件查询 |
| where、set、trim | 辅助元素 | 格式化输出 |
insert 标签常用属性介绍:
id:唯一指定标签的名字
parameterType:给SQL语句传递参数的数据类型
parameterMap:给SQL语句传递参数的数据类型,需要和标签连用
resultType :查询结构返回的数据类型,自动进行封装操作
resultMap:查询结果返回的数据类型,会根据映射文件中来完成数据封装
常用属性介绍:
id:唯一指定标签的名字
parameterType:给SQL语句传递参数的数据类型
parameterMap:给SQL语句传递参数的数据类型,需要和标签连用
resultType :查询结构返回的数据类型,自动进行封装操作
resultMap:查询结果返回的数据类型,会根据映射文件中来完成数据封装
useGeneratedKeys:true为启用设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中
keyProperty:javabean中的属性名称
keyColumn:对应数据库的字段名称
update 标签INSERT INTO user age, `name` #{age}, #{name}
属性同 insert
delete 标签UPDATE user WHERe id = #{id} age = #{age}, `name` = #{name}
属性同 insert
if 标签UPDATE user SET age= 13 WHERe id = #{id}
if标签是最常用的动态标签,可以和大部分标签结合使用
test:对要判断的字段来写限制条件
foreach 标签and name = #{name}
choose 标签foreach 标签主要用于构建 in 条件,可在 sql 中对集合进行迭代。也常用到批量删除、添加等操作中。
collection:collection 属性的值有三个分别是 list、array、map 三种,分别对应的参数类型为:List、数组、map 集合。
item :表示在迭代过程中每一个元素的别名
index :表示在迭代过程中每次迭代到的位置(下标)
open :前缀
close :后缀
separator :分隔符,表示迭代时每个元素之间以什么分隔
where 标签有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。
MyBatis 提供了 choose 元素,按顺序判断 when 中的条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when的条件都不满则时,则执行 otherwise 中的 sql。类似于 Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。
if 是与(and)的关系,而 choose 是或(or)的关系。
where标签会知道如果它包含的标签中有返回值的话,它就插入一个‘where’。
此外,如果标签返回的内容是以 AND 或 OR 开头的,则它会剔除掉
以下sql当 name 值为 null 时,查询语句会出现 “WHERe AND” 的情况
解决该情况除了将"WHERe"改为“WHERe 1=1”之外,还可以利用 where标签
set 标签
当在 update 语句中使用 if 标签时,如果最后的 if 没有执行,则或导致逗号多余错误。
使用 set 标签可以将动态的配置 set关键字,和剔除追加到条件末尾的任何不相关的逗号。
update user set name = #{name}, age = #{age} WHERe ID = #{id};
使用 set+if 标签修改后,如果age为null时,会剔除name追加到条件末尾的任何不相关的逗号
trim 标签update user WHERe ID = #{id}; name = #{name}, age = #{age}
常用于insert、update语句中
trim属性主要有以下四个:
prefix:在trim标签内sql语句加上前缀
suffix:在trim标签内sql语句加上后缀
prefixOverrides:指定去除多余的前缀内容,如:prefixOverrides=“AND | OR”,去除trim标签内sql语句多余的前缀"and"或者"or"。
suffixOverrides:指定去除多余的后缀内容。
update user set where id=#{id} name = #{name}, age = #{age},
如果name和age的值都不为空的话,会执行如下语句,会忽略最后一个“,”
update user set name='XX',age='XX' where id='XX'



