一丶实体类的设计
主类
@Data
@TableName("partners_logo")
public class PartnersLogo {
/**
* 主键
*/
@ApiModelProperty("主键")
@TableId(type = IdType.ASSIGN_ID)
private Long id;
@TableField(exist = false)
@ApiModelProperty("所属节点")
private List<String> nodeList;
}
站点关联类
@Data
@Accessors(chain = true)
@TableName("site_business_relation")
public class SiteBusinessRelation implements Serializable {
@TableId(value = "id",type = IdType.ASSIGN_ID)
private Long id;
@ApiModelProperty(value = "站点id")
@TableField(value = "site_id")
private String siteId;
@ApiModelProperty(value = "关联对应业务表id")
@TableField(value = "business_id")
private String businessId;
@ApiModelProperty(value = "业务类型 banner:banner图 financial:金融机构
creditProduct:征信产品 news:行业动态 dataConfig:数据配置")
@TableField(value = "business_type")
private String businessType;
}
二丶mybatis的写法
resultMap写法,关联主语句和站点查询语句
<resultMap type="cn.ctyun.others.entities.PartnersLogo" id="partnersLogoMap">
<result property="id" column="id"/>
<collection property="nodeList" select="selectSiteRelation" column="id=id" >
</collection>
</resultMap>
分页查询语句,会先执行主语句
<select id="pageList" resultMap="partnersLogoMap">
SELECT DISTINCT(logo.id),
LEFT JOIN site_business_relation relation ON logo.id = relation.business_id AND
relation.business_type = "partnerLogo"
WHERE del_flag = 0
<if test="nodes != null and nodes.size() > 0">
AND relation.site_id IN
<foreach item="item" collection="nodes" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
关联查询语句 ,查询的结果填充到NodeLsit
<select id="selectSiteRelation" resultType="String">
SELECT relation.site_id
FROM site_business_relation relation
WHERE relation.business_id = #{id} AND relation.business_type = "partnerLogo"
</select>