mybatis映射器和动态SQL总结

映射器

mybatis的映射器包含两部分:接口和映射文件。映射器的配置元素包括:select、insert、update、delete、sql、resultMap。mybatis映射文件的总结:
1、对于parameterType入参类型常用的有java.util.Map、java.lang.Integer等,可以采用系统自带的别名如byte、long、short、int、integer、float、double、boolean、string、date、map、list、decimal、bigdecimal等简化配置,也可以在mapper中自定义别名如

传递多个参数的情况下,有如下传参方式:
1) 封装到map,用map接收;
2) 通过@Param("userId")传递,无需parameterType接收可直接使用;
3) 通过POJO封装同时用它接收。
建议5个以下参数采用第二种方式,5个以上采用第三种。返回类型一般有resultType和resultMap两种,insert、update、delete是不需要返回类型的,默认是整型。

2、resultMap用来映射结果集。type为映射的实体类,可以是类的全限定名或别名;id为此resultMap的标识。resultMap包含id、result、association 子元素,id和result用来将POJO的属性和SQL的列名做对应。
resutltMap的type属性设置为java.util.Map可以在dao中用Map接收数据

mybatis映射器和动态SQL总结_第1张图片

而实际上type为实体类的情况更常用,resultMap="BaseResultMap"表示返回类型为实体类

mybatis映射器和动态SQL总结_第2张图片

 association – 复杂类型的结合;多个结果合成的类型


	
	
	

3、主键回填,插入操作后返回自增Id,useGeneratedKeys用来控制是否打开自动生成主键这个功能,默认是false,当打开了这个开关,还要配置其属性keyProperty或keyColumn,告诉系统将生成的主键放入到哪个属性中。

4、字段为sql关键字如from,可使用反引号

INSERT IGNORE INTO t_user_info( member_code, enterprise_id, `from` ) VALUES ( #{memberCode}, #{enterpriseId}, #{from})

动态SQL

动态SQL的基本元素包括:if、set、where、bind、foreach、choose(when,otherwise)、trim(where,set)

1、用来截取并去掉特殊的字符串

prefix代表的是语句的前缀,而prefixOverrides代表的是那种字符串。


	insert into t_user_info
	
		MEMBER_CODE,
		enterprise_id,
		update_time
	
	
		#{memberCode,jdbcType=VARCHAR},
		#{enterpriseId,jdbcType=INTEGER},
		#{updateTime,jdbcType=TIMESTAMP}
	

2、批量操作或in需要使用到


	insert ignore into t_user_info (
	MEMBER_CODE,
	DEPARTMENT_ID,
	UPDATE_TIME
	)
	values 
	
		(
		#{item.memberCode,jdbcType=VARCHAR},
		#{item.departmentId,jdbcType=INTEGER},
		#{item.updateTime,jdbcType=TIMESTAMP}
		)
	

3、数值比较时不允许出现">"、"&&"这样的字符因为这个mapper文件是xml格式的,使用这类符号不再进行解析 


	m.`music_name` AS resultName

4、选择判断

5、以上示例如果不使用1=1,有时会出错,加入后又觉得多余,可以通过去处理,当where的某个条件成立时,才会加入这个条件

6、更新操作使用根据传入的参数动态更新指定的字段


	update t_role
	
		
			role_name = #{roleName},
		
		
			note = #{note},
		
	
	where role_no = #{roleNo}

7、是通过ognl表达式定义的上下文变量,这样更加方便使用。用来替换mysql 的concat拼接和oracle中的||拼接。

 

参考:mybatis官方文档

 

 

你可能感兴趣的:(mybatis)