Mybatis高级查询


高级结果映射


resultMap的association配置一对一映射

association 标签包含以下属性。
property:对应实体类中的属性名,必填项。
javaType: 属性对应的 Java 类型。
resultMap: 可以直接使用现有的 resultMap,而不需要在这里配置。 
columnPrefix:查询列的前缀,配置前缀后,在子标签配置 result 的 column 时 可以省略前缀
	<resultMap id="userRoleMap" extends="userMap" type="tk.mybatis.simple.model.SysUser">
		<association property="role" columnPrefix="role_" resultMap="tk.mybatis.simple.mapper.RoleMapper.roleMap"/>
	</resultMap>

association 标签的嵌套查询

association 标签的嵌套查询常用的属性如下。
select:另一个映射查询的 id, MyBatis 会额外执行这个查询获取嵌套对象的结果。
column :列名(或别名),将主查询中列的结果作为嵌套查询的参数,
配置方式如 column={prop1=col1 , prop2=col2}, prop1 和 prop2 将作为嵌套查询的参数。
fetchType:数据加载方式,可选值为 lazy 和 eager,分别为延迟加载和积极加载, 这个配置会覆盖全局的 lazyLoadingEnabled 配置.
	<resultMap id="userRoleMapSelect" extends="userMap" type="tk.mybatis.simple.model.SysUser">
		<association property="role" 
					 fetchType="lazy"
					 select="tk.mybatis.simple.mapper.RoleMapper.selectRoleById" 
					 column="{id=role_id}"/>
	</resultMap>
无论额外查询的数据是否有无用到,总会执行额外查询的SQL语句,
这样会造成多余的数据库查询,配置懒加载之后,可以避免这种情况发生,
在调用了实体类中的方法获取role的时候才会加载这个额外的SQL.

mybatis-config.xml中的配置(不配置这个参数会导致懒加载失效)

<settings>
	<!--其他配置-->
	<setting name="aggressiveLazyLoading" value="false"/>
</settings>
在 MyBatis 的全局配置中,有一个参数为 aggressiveLazyLoading。
这个参数的含义是,当该参数设置为 true 时,
对任意延迟属性的调用会使带有延迟加载属性的对象完整加载,
反之,每种属性都将按需加载.

一对多映射

collection 支持的属性以及属性的作用和 association 完全相同

	<resultMap id="userRoleListMap" extends="userMap" type="tk.mybatis.simple.model.SysUser">
		<collection property="roleList" columnPrefix="role_" 
					resultMap="tk.mybatis.simple.mapper.RoleMapper.roleMap"/>
	</resultMap>

mybatis通过对id是否相同来判断是否为同一个用户
在映射配置中至少含有一个id

		<id property="id" column="id"/>

collection可以进行嵌套映射,collection的resultMap中使用collection的resultmap标签继续映射即可

鉴别器映射
discriminator标签,类似java中的switch语句

discriminator 标签常用的两个属性如下。
column: 该属性用于设置要进行鉴别比较值的列。
javaType: 该属性用于指定列的类型,保证使用相同的 Java 类型来比较值。
discriminator 标签可以有 l 个或多个 case 标签, case 标签包含以下三个属性。
value: 该值为 discriminator 指定 column 用来匹配的值。
resultMap: 当 column 的值和 value 的值匹配时,可以配置使用 resultMap 指定 的映射, resultMap 优先级高于 resultType。
resultType: 当 column 的值和 value 的值匹配时,用于配置使用 resultTyp e 指定的映射。 
<discriminator column="enabled" javaType="int">
			<case value="1" resultMap="rolePrivilegeListMapSelect"/>
			<case value="0" resultMap="roleMap"/>
</discriminator>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值