Mybatis之XML映射文件标签解析

1. resultMap

         我们可以使用resultMap标签自定义结果集和实体类属性的映射规则。可以理解为将数据库表的字段名表对应的实体类的属性名映射起来。

属性:

id:唯一标识

type:用来指定映射到哪个类

extends:继承其他map的映射规则

标签:用来指定主键列的映射规则 property是属性名 column是对应列名

标签:用来指定普通列的映射规则

标签:一个复杂类型的关联,许多结果将包装成这种类型,这里关联了SysDept

标签:一个复杂类型的集合

    
        
        
        
        
        
        
        
        
        
    

使用SysUserResult:

	

2. sql 

        用来定义可以重用的sql代码,以便在其他语句中使用,简单实例:

	
        select user_id, user_name
        from sys_user 
    

使用:

	

3. select 

Mybatis中的查询语句,最为常用,简单的查询如下,接受的参数是int类型,返回的对象类型是 hashMap类型。,其中键是列名,值是结果行中返回的值。

属性:

parameterType:传入参数的全限定名或别名。可选,mybatis可以自动推断。

resultType:返回结果的类全限定名或别名,如果返回的是集合,应该设置为集合中元素的类型。

resultMap:对定义的 resultMap 的引用。

4. insert 

插入标签,属性:

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()
 		)
	

5. update

	
 		update sys_user
 		
 			dept_id = #{deptId},
 			user_name = #{userName},
 			update_time = sysdate()
 		
 		where user_id = #{userId}
	

6. delete

	
 		update sys_user set del_flag = '2' where user_id = #{userId}
 	

7. 动态SQL

(1)if 标签

可以使用if标签进行条件判断,条件成立才会把if标签中的内容拼接进sql语句中。

    

如果参数username为null则执行的sql为:select  from user where id = ?

如果参数username不为null则执行的sql为:select  from user where id = ? and username = ?

(2)trim 标签

可以使用该标签动态的添加前缀或后缀,也可以使用该标签动态的消除前缀。

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

    

(3)where 标签

where标签等价于:



如果标签里面有内容,就会在前面加上 where ,并且会清除最后的 and 或者 or 后缀。

(4)set 标签

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(),

(5)foreach 标签

可以使用foreach标签遍历集合或者数组类型的参数,获取其中的元素拿来动态的拼接SQL语句。常用于批量操作数据库,如批量插入,批量删除。

collection:表示要遍历的参数。

open:表示遍历开始时拼接的语句

item:表示给当前遍历到的元素的取的名字

separator:表示每遍历完一次拼接的分隔符

close:表示最后一次遍历完拼接的语句

实例:

list 列表装有 5 个 ExamPaperItem 对象。将paperId questionId 批量插入到数据表中。

Mybatis之XML映射文件标签解析_第1张图片

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映射文件中常用标签的使用方法。

你可能感兴趣的:(mybatis,xml,java)