关联查询

  • association(一对一 嵌套结果(一条sql 一次查询))
    Tips:
    1、resultMap 可以通过extends 实现继承,来简化工作量
    2、关联查询设置前缀是一个好习惯
    3、通过添加完成整的命名空间,可以引用其他xml文件的resultMap
<resultMap id="userAndPostion" extents="BaseResultMap" type="TUSER">
  <association property="postion" javaType="TPosition" columnPrefix="post_">
    <id column="id" property="id"/>
    <result column="name" property="postName"/>
    <result column="note" property="note"/>
  </association>
</resultMap>
<select id="selectUserPostion" resultMap="userAndPosition">
  select a.id,user_name,sex,b.id post_id, b.name post_name, b.note post_note
  from t_user a, t_positiion b
  where a.psotion_id = b.id
</select>

association(一对一 嵌套查询(多次查询))

这里我们可以在association 标签上添加fetchType="lazy"(eager),并且把配置文件中setting 下aggressiveLazyLoading 设置成false(按需加载) 来设置成懒加载

<resultMap id="userAndPostion" extents="BaseResultMap" type="TUSER">
  <association property="postion" column="position_id" select="com.enjoy.mybatis.mapper.TPositionMapper.selectById"/>
</resultMap>

collection(一对多)

  • collection 支持的属性以及属性的作用和association完全相同
  • mybatis 会个根据id 标签,进行字段的合并,合理配置好ID 标签可以提高处理效率

discriminator 鉴别器映射

在特定的情况下,根据一个字段去使用不同的pojo进行关联,功能很像java 中的switch;

  • discriminator 标签常用的两个属性如下:
    column:该属性用于设置要进行鉴别比较值的列
    javaType:该属性用于指定列的类型,保证使用相同的java类型来比较值

  • discirminator 标签可以有1个或多个case标签,case 标签包含以下三个属性
    value:该值为discriminator 指定column用来匹配的值
    resultMap:当column的值和value的值匹配时,可以配置使用resultMap指定的映射,resultMap优先级高于resultType
    resultType:当column的值和value 的值匹配时,用于配置使用resultType指定的映射

<resultMap id="userAndHealthReport" extends="BaseResultMap" type="User">
  <discriminator column="sex" javaType="int">
    <case value="1" resultMap="userAndHealthReportMale">
    <case value="2" resultMap="userAndHealthReportFemale">
  </discriminator>
</resultMap>

<resultMap id="userAndHealthReportMale" extends="userAndHealthReport" type="User">
  <collection property="healthReports" column="id" select="com.enjoy.mybatis.HealthReportMalMapper.selectById">
  </collection>
</resultMap>

<resultMap id="userAndHealthReportFemale"  extends="userAndHealthReport"  type="User">
  <collection property="healthReports" column="id" select="com.enjoy.mybatis.HealthReportFemalMapper.selectById">
  </collection>
</resultMap>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关联查询代码参考mybatis-demo测试代码AssociationQueryTest.java 0.关联查询的...
    王侦阅读 3,805评论 0 15
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 11,151评论 0 4
  • 方法一 例如,一个班级对应一个班主任。 首先定义好班级中的班主任属性: TeacherMapper.xml文件部分...
    不知名的蛋挞阅读 5,068评论 0 0
  • 一、引言 通过动态SQL我们可以进行复杂SQL的编写,但之前的例子都是单表查询,在实际开发中,当然不可能都是单表,...
    零点145阅读 2,187评论 0 0
  • MyBatis--关联查询 当查询内容涉及到具有关联关系的多个表时,就需要使用关联查询。根据表与表间的关联关系的不...
    我可能是个假开发阅读 13,212评论 0 16