我们可以使用resultMap标签自定义结果集和实体类属性的映射规则。可以理解为将数据库表的字段名和表对应的实体类的属性名映射起来。
属性:
id:唯一标识
type:用来指定映射到哪个类
extends:继承其他map的映射规则
使用SysUserResult:
用来定义可以重用的sql代码,以便在其他语句中使用,简单实例:
select user_id, user_name
from sys_user
使用:
Mybatis中的查询语句,最为常用,简单的查询如下,接受的参数是int类型,返回的对象类型是 hashMap类型。,其中键是列名,值是结果行中返回的值。
属性:
parameterType:传入参数的全限定名或别名。可选,mybatis可以自动推断。
resultType:返回结果的类全限定名或别名,如果返回的是集合,应该设置为集合中元素的类型。
resultMap:对定义的 resultMap 的引用。
插入标签,属性:
useGeneratedKeys:(仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。
keyProperty:(仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值,默认值:未设置(unset
)。如果生成列不止一个,可以用逗号分隔多个属性名称。
insert into sys_user(
user_id,
dept_id,
user_name,
create_time
)values(
#{userId},
#{deptId},
#{userName},
sysdate()
)
update sys_user
dept_id = #{deptId},
user_name = #{userName},
update_time = sysdate()
where user_id = #{userId}
update sys_user set del_flag = '2' where user_id = #{userId}
可以使用if标签进行条件判断,条件成立才会把if标签中的内容拼接进sql语句中。
如果参数username为null则执行的sql为:select from user where id = ?
如果参数username不为null则执行的sql为:select from user where id = ? and username = ?
可以使用该标签动态的添加前缀或后缀,也可以使用该标签动态的消除前缀。
1)prefixOverrides 属性
用来设置需要被清除的前缀,多个值可以用 | 分隔,注意 | 前后不要有空格。例如: and|or
最终执行的sql为: select * from user
2)suffixOverrides 属性
用来设置需要被清除的后缀,多个值可以用 | 分隔,注意 | 前后不要有空格。例如: and|or
最终执行的sql为: select * from user 去掉了后缀like
3)prefix 属性
用来设置动态添加的前缀,如果标签中有内容就会添加上设置的前缀,这里标签里面有内容,就会在这个标签前面加上一个 where
最终执行的sql为:select * from user where 1=1 动态增加了前缀where
4)suffix 属性
用来设置动态添加的后缀,如果标签中有内容就会添加上设置的后缀,这里标签里面有内容 where ,所以会在 select * from user where这个语句后面加上 1=1。
where标签等价于:
如果标签里面有内容,就会在前面加上 where ,并且会清除最后的 and 或者 or 后缀。
set 标签等价于:常用于更新操作。
如果标签里面有内容,就在前面加上set, 并且清除最后的逗号 ,
实例:
update sys_user
dept_id = #{deptId},
user_name = #{userName},
update_time = sysdate(),
where user_id = #{userId}
等价于下面:
dept_id = #{deptId},
user_name = #{userName},
update_time = sysdate(),
可以使用foreach标签遍历集合或者数组类型的参数,获取其中的元素拿来动态的拼接SQL语句。常用于批量操作数据库,如批量插入,批量删除。
collection:表示要遍历的参数。
open:表示遍历开始时拼接的语句
item:表示给当前遍历到的元素的取的名字
separator:表示每遍历完一次拼接的分隔符
close:表示最后一次遍历完拼接的语句
实例:
list 列表装有 5 个 ExamPaperItem 对象。将paperId questionId 批量插入到数据表中。
Mapper
int batchPaperQuestion(List list);
xml
insert into exam_paper_item(paper_id, question_id) values
(#{item.paperId},#{item.questionId})
实际的执行的 sql 语句:
insert into exam_paper_item(paper_id, question_id) values (121,64), (121,65), (121,66), (121,67), (121,68)
以上就是xml映射文件中常用标签的使用方法。