mybatis注解形式多表关联字段映射时注意的小点

JAVA开发 workingTime 222℃ 0评论

引子:现在又如下两张表需要做left join表关联,关联字段为line_code


CREATE TABLE `c_checkline` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(20) NOT NULL COMMENT '名称',
  `code` varchar(20) NOT NULL COMMENT '检线编码',
  `created_by` int(11) DEFAULT NULL COMMENT '创建人',
  `updated_by` int(11) DEFAULT NULL COMMENT '更新人',
  `created_on` timestamp NOT NULL COMMENT '创建日期',
  `updated_on` timestamp NOT NULL COMMENT '更新日期',
  PRIMARY KEY (`id`),
  UNIQUE KEY `code` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='基础表检线表'

CREATE TABLE `c_hosp_checkline` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(20) NOT NULL COMMENT '名称',
  `line_code` varchar(20) NOT NULL COMMENT '检线编码',
  `status` int(11) DEFAULT NULL COMMENT '可用状态:0启用,1禁用',
  `created_by` int(11) DEFAULT NULL COMMENT '创建人',
  `updated_by` int(11) DEFAULT NULL COMMENT '更新人',
  `created_on` timestamp NOT NULL COMMENT '创建日期',
  `updated_on` timestamp NOT NULL COMMENT '更新日期',
  `hosp_id` int(11) NOT NULL COMMENT '分院id',
  `mis_hosp_code` varchar(10) DEFAULT NULL COMMENT '检线对应mis分院编码',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='分院检线表'

SQL 语句为:

SELECT hcl.id ,hcl.name ,cl.name from c_hosp_checkline hcl left JOIN c_checkline cl on hcl.line_code = cl.`code`

创建两个表的bean(这里我就不贴代码了),因为是两遍关联查询,所以需要在表c_hosp_checkline的bean中,加入c_checkline表的bean实体。

mybatis代码如下:


@Select("SELECT hcl.id ,hcl.name ,hcl.status ,cl.id,cl.name as clName from c_hosp_checkline hcl " +
            "left JOIN c_checkline cl on hcl.line_code = cl.`code` " +
            "where hosp_id = #{hospId}")
@Results({
        @Result(column="clName", property="checkline.name", jdbcType=JdbcType.VARCHAR),
})
List<HospCheckline> selectByHospId(Integer hospId);

注意这行代码:property="checkline.name",因为两个表中有同名字段,而且是表关联,所以在实体解析的时候,需要这这样操作。

转载请注明:R&M » mybatis注解形式多表关联字段映射时注意的小点

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

联系我:rm@rmworking.com