可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是prefix和suffix;
可以把包含内容的首部某些内容忽略,也可以把尾部的某些内容忽略,对应的属性是prefixOverrides和suffixOverrides;
案例:
prefixOverrides 属性会忽略通过管道分隔的文本序列(注意此例中的空格也是必要的)
select * from user
AND name=#{name}
AND gender=#{gender}
update user
name=#{name} ,
AND gender=#{gender} ,
INSERT INTO S_NOTICE
ID,
TITLE,
CONTENT,
NOTICE_STATUS,
CREATED_BY,
CREATED_TS,
LAST_UPD_BY,
LAST_UPD_TS,
SYS_GUID(),
#{title,jdbcType=VARCHAR},
#{content,jdbcType=VARCHAR},
#{noticeStatus,jdbcType=VARCHAR},
#{createdBy,jdbcType=VARCHAR},
systimestamp,
#{lastUpdBy,jdbcType=VARCHAR},
systimestamp,
collection:参数名称,根据Mapper接口的参数名确定,也可以使用@Param注解指定参数名
item:参数调用名称,通过此属性来获取集合单项的值
open:相当于prefix,即在循环前添加前缀
close:相当于suffix,即在循环后添加后缀
index:索引、下标
separator:分隔符,每次循环完成后添加此分隔符
in查询
mapper接口:
List getEmployeesListParams(@Param("singleList") List employeeIds);
List getEmployeesArrayParams(@Param("singleArry") String[] employeeIds);
List getEmployeesMapParams(Map params);
XML实现:
tips:此处没有 @Param("singleLIst") 注解时,XML里只能是 collection="list"
此处没有 @Param("singleArry") 注解时,XML里只能是 collection="array"
此处Map:不单单forech中的collection属性是map.key, 其它所有属性都是map.key,比如下面的departmentId
如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key.
批量插入
mapper接口
int insertMultiUsers(@Param("users") List users);
XML实现:
insert into user(user_name,gender,email,address,dept_id)
values
(#{user.userName},#{user.gender},#{user.email},#{user.address},#{user.deptId})