樹結構實體類:
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("AREA_INFO")
public class AreaInfo{
//行政區域編號
@TableId(value = "AREA_NO", type = IdType.ID_WORKER_STR)
private String areaNo;
// 行政區域名稱
@TableField("AREA_NAME")
private String areaName;
// 父區域編號
@TableField("PARENT_AREA_NO")
private String parentAreaNo;
// 備註
@TableField("REMARK")
private String remark;
//狀態(0-無效;1-有效)
@TableField("STATUS")
private String status;
//子元素
@TableField(exist = false)
private List<McsAreaInfo> children;
}
數據庫表機構如下:
CREATE TABLE `AREA_INFO` (
`AREA_NO` varchar(32) NOT NULL COMMENT '行政區域編號',
`AREA_NAME` varchar(128) DEFAULT NULL COMMENT '行政區域名稱',
`PARENT_AREA_NO` varchar(32) DEFAULT NULL COMMENT '父區域編號',
`REMARK` varchar(512) DEFAULT NULL COMMENT '備註',
`STATUS` varchar(8) DEFAULT NULL COMMENT '狀態(0-無效;1-有效)',
PRIMARY KEY (`AREA_NO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='區域表';
java dao中如下:
@Mapper
public interface AreaInfoDao extends BaseMapper<AreaInfo> {
//獲取區域樹形菜單
public List<AreaInfo> getAreaInfoTree(String parentAreaNo);
}
mybatis中sql如下:
<resultMap type="com.AreaInfo" id="areaInfoResult">
<id column="AREA_NO" property="areaNo"/>
<result column="AREA_NAME" property="areaName"/>
<result column="STATUS" property="status"/>
<collection column="AREA_NO" property="children" ofType="com.AreaInfo"
select="getAreaInfoTree"></collection> </resultMap>
<select id="getAreaInfoTree" resultMap="areaInfoResult" parameterType="string">
select AREA_NO,AREA_NAME,PARENT_AREA_NO,STATUS from AREA_INFO where
PARENT_AREA_NO=#{parentAreaNo}
</select>
說明:此查詢方式只是適合於少量數據查詢,如果數據量太大數據庫壓力特別大,所以不建議使用,針對於大量的樹形數據,可採用懶加載的方式,或者直接查詢出列表交給前段自己處理。